# 用一个python项目文件夹结构说明掌握 PYTHONPATH作用的重要性
这个readme要认真看,里面说明了pythonath的作用,
第2、3 章 说明了为什么复杂深层级项目的代码在pycharm导入和运行完美,在cmd或者shell下import不到导致报错的例子。
第6章还重点解释了永久性环境变量和临时环境变量的重大影响范围的区别
第7章说明了任何项目如果设置了 PYTHONPATH 的4大好处
第9章说明了设置 PYTHONPATH 达到多个项目复用公司公共工具类代码的妙用
## 其他 PYTHONPATH文章
[环境变量:PYTHONPATH](https://cloud.tencent.com/developer/article/1473765)
[See the Python 3 docs for PYTHONPATH.](https://bic-berkeley.github.io/psych-214-fall-2016/using_pythonpath.html)
[官网讲pythonpath](https://docs.python.org/3/using/cmdline.html#envvar-PYTHONPATH)
## 1.项目目录说明
```
pythonpathdemo是这个项目的根目录,
d1/d2/d3/m3.py 有一个fun3函数,
d4/d5/run.py 里面导入和运行fun3函数
,这种目录的python项目就很容易验证懂PYTHONPATH的重要性了。
```
## 2. 演示pyachrm完美运行,cmd和vscode报错
![](https://img2020.cnblogs.com/blog/1108990/202111/1108990-20211119103852120-953934616.png)
截图可以看出,在pycahrm运行run5.py正确调用fun3函数,在cmd命令行却不行,vscode也不行。
主要原因是pycahrm自动把项目根目录加到了 PYTHONPATH,如下图你把这两个勾选去掉就pycahrm运行run5.py也会和cmd命令行一样报错。
![](https://img2020.cnblogs.com/blog/1108990/202111/1108990-20211119104028204-1581286624.png)
## 3. 演示在cmd命令行设置临时会话环境变量 PYTHONPATH 后运行完美
```
如果在cmd窗口会话中临时设置PYTHONPATH为项目根目录再运行run5.py就不会报错了。
注意要在代码运行前临时设置环境变量,不要设置永久固定系统环境变量,因为你不可能只有一个python项目,一般每个人最少有七八个python项目吧。
如果嫌敲击两次命令麻烦,一句命令行可以运行多个命令,
win的传统cmd是: set PYTHONPATH=项目根目录 & python run.py
win10/11的pwoershell是 $env:PYTHONPATH=项目根目录 & python run.py
(win的cmd和powershell设置会话级临时环境变量的语法是不一样的,pycharm终端中两者都可以,有个设置,如果win+pycharm不确定是哪种语法,可以两种加环境变量的语法都执行一下。)
linux是: export PYTHONPATH=项目根目录 ; python run.py,
vscode 也是可以学pycharm 设置PYTHONPATH的,只是不是像pycahrm那样默认自动添加,所以pycahrm专业ide就是比vscode好。
自己百度vscode PYTHONPATH 关键字。
```
![](https://img2020.cnblogs.com/blog/1108990/202111/1108990-20211119104340305-1438114681.png)
## 4.演示不学习PYTHONPATH, 愚蠢的手动硬编码 sys.path
```
笨瓜喜欢手动操作sys.path,然后在cmd命令,cd 到d5目录下,
再运行 python run5.py,太笨了这样写,
如果别的文件夹层级有run6.py run7.py,一个个脚本硬编码sys.path改到猴年马月。
```
![](https://img2020.cnblogs.com/blog/1108990/202111/1108990-20211119104757875-1491247839.png)
```
为什么老有笨瓜喜欢在很多python脚本硬编码 sys.path.insert或者append?
这种人主要是不懂 PYTHONPATH的作用,造成到处手动硬编码操作sys.path。
你不信去看看任意一个三方包python大神写的框架或者库,就算目录结果复杂有七八层文件夹,有谁那么愚蠢这么手动操作sys.path的?
手动sys.path.insert是一厢情愿一意孤行意淫的写法。
可以这么说,在控制台命令行部署运行任何项目,把PYTHONPATH设置为项目根目录路径是最合适的,
pycahrm默认帮我们这么做了。你这么做了,那么你的代码运行逻辑就和pycahrn运行代码保持一致了。
```
像这个深层级文件夹下的 d6/d7/d8/d9/d10/run10.py ,在cmd下运行,你不会设置 PYTHONPATH,手写sys.path真的是非常的想死的心都有了。
如果你的项目有有几百个深层级目录下的脚本都可以做为运行起点被直接python xx.py 启动,你为了cmd运行正常,一个一个的脚本里面加sys.path.insert加到口吐鲜血。
[![Txasbj.md.png](https://s4.ax1x.com/2022/01/06/Txasbj.md.png)](https://imgtu.com/i/Txasbj)
## 5 在win和linux,cmd和shell一句话怎么运行两条命令
### 5.1 如果分开两次运行命令行
```
首先cd 到项目根目录,然后linux 上 是 export PYTHONPATH=./
如果是win上是 set PYTHONPATH=./ ,
如果是win10/11的powershell上是 $ENV:PYTHONPATH="./" & python xx.py
然后可以切换到任意文件夹,运行你需要运行的python xx.py
当然可以不先cd到项目根目录,那就 export PYTHONPATH=项目根目录的绝对路径 就行了。
```
### 5.2 如果一句命令行同时设置环境变量和运行python脚本
```
首先cd 到项目根目录,
然后linux 上 是 export PYTHONPATH=./ ; python xx.py
如果是win的cmd上是 set PYTHONPATH=./ & python xx.py
如果是win10/11的powershell上是 $ENV:PYTHONPATH="./" & python xx.py
当然可以不先cd到项目根目录,那就 export PYTHONPATH=项目根目录的绝对路径 就行了。
```
## 6 需要非常非常重点的说明什么叫临时会话级环境变量和什么是永久性写死的环境变量,区别很大,
# 有的人非常之疑惑环境变量会不会混乱乱套的,一定看这个要。
这个知识点本来不应该在这里说,不属于pythonpath要讲解的。
但是很多人仍然不清楚临时环境变量和永久性环境变量的区别,导致很疑惑认为python项目如果有十几个,一台linux机器登录的人数如果很多,会不会互相干扰
```
实不相瞒本人多年前看dajngo也很疑惑,例如django的 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "WorkPlatFormApi.settings"),
我那时候一直在想,如果一台机器部署七八个django服务咋办,每个项目全都设置自己的 DJANGO_SETTINGS_MODULE 这个 环境变量,那不是乱套呀。
如果我设置这个环境变量会不会影响同事使用这个linux也使用django?会不会混了乱套了?需不需要提心吊胆呢?
那个时候,主要是没理解什么是临时环境变量和永久性环境变量。一直到现在 很多人在使用我的框架时候,我要求设置PYTHONPATH,他们一直疑惑这个问题。
WorkPlatFormApi.settings 说得是从 WorkPlatFormApi 文件夹下的 settings.py 作为配置文件来源,
如果你在测试linux环境想用不同的msqyl配置等,写个 settings_test.py,然后 export DJANGO_SETTINGS_MODULE="WorkPlatFormApi.settings_test",
再用uswgi部署django,那就自动使用指定的settings_test.py了。生产环境写个 settings_prod.py 设置环境变量同理。
```
### 6.1 什么是永久性环境变量
```
永久性环境变量就是你在win上,点电脑右键 高级里面设置环境变量
在linux就是vim /etc/profile ,或者 vim ~/.bashrc ,
这种修改就是永久性固定写死的环境变量,会影响使用这台电脑的所有人,在这里写 PYHTONPATH 不仅会影响所有人也会影响所有python项目,
这种一般是配置java安装在哪里了,python安装在哪里了,但非常不适合设置 PYTHONPATH
```
### 6.1.2 在环境变量配置文件中写死永久性PYTHONPATH的非常坑人例子
```
公司我们测试环境只有一台服务器,都是登录同一个用户,有个ai硕士 他的项目根目录是 /codes/aiproj/,他的项目根目录下有个 requests.py
同时他在 /etc/profile 中设置了 export PYTHONPATH=/codes/aiproj/,当我们项目导入 import requests时候,运行出错,开发环境运行的好好地,测试环境总是报错,
这个永久性写死PYTHONPATH把我们坑得要死,因为import requests 优先import 到 这个 /codes/aipro
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
用专门的项目说明掌握python的 PYTHONPATH的重要性;说明窗口会话临时环境变量和永久性环境变量区别;说明pythonpath的好处;说明pythonpath的妙用。学了PYTHONPATH 写几十个项目复用公共代码如虎添翼 软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备、移动设备等 操作系统:LInux、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信是一个非常广泛的领域,它涉及到计算机科学、电子工程、数学等多个学科的知识。 云计算与大数据:包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。
资源推荐
资源详情
资源评论
收起资源包目录
用专门的项目说明掌握python的 PYTHONPATH的重要性;说明窗口会话临时环境变量和永久性环境变量区别;说明pythonpath的好处;说明pythonpath的妙用。学了PYTHONPATH 写几十个项目复用公共代码如虎添翼.zip (10个子文件)
222
d4
d5
run5.py 302B
d20
run20.py 152B
git_pythonpathdemo.py 1KB
run_root.py 188B
d1
d2
d3
m3.py 40B
.gitignore 620B
d6
d7
d8
d9
d10
run10.py 273B
img.png 214KB
README.md 12KB
img_1.png 40KB
共 10 条
- 1
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功