1、文件/包的引用规则,要从工程的根目录开始查找,这样的使用相对路径的方式比较简单,并且容易理解。
比如我们建立如下的目录结构:
此时我们要在c 文件中,引用a文件中的内容,那么在c文件中,就可以这么写:
from dir_A import a
print(a.A)
同时我们运行python文件的时候,需要在工程的根目录进行运行。
2、为什么要指定Python的环境变量呢?
因为 sys.path 是Python的一个搜索模块的路径集,当我们将Python的三方包的路径添加进去的话,那么我们就可以引用到所有的三方库了。同样也适用于我们自己建的包
下面先那工程内的包,进行举个栗子:
下图展示的是该工程的路径已经被添加到python的搜索路径了,所以基于工程的根目录运行不会出现任何错误。
错误实例:如果我们不在根目录执行c文件的话,会如何呢?
因为命令行执行的时候,python的搜索路径是在文件所在目录(即test_import/dir_B/dir_C目录)
而直接运行编辑器的时候,python的搜索路径会包含工程的根目录与当前目录。
所以在命令行运行,并且当进入到dir_C的时候,是从当前目录去查找了dir_A 当然是找不到的。所以就会报错。而编辑器的时候是正常的,它会从根目录再查找一次。
Q3:引用虚拟环境中的三方包?
有些时候我们会使用virtualenv 或者pipenv 等三方包,来创建虚拟环境,来管理我们工程所以用的python版本,但是我们在使用虚拟环境中的包的时候就需要在命令行指定python的环境变量(即python的搜索路径)。例如:
虚拟环境安装的三方包️:
我们需要指定
- 命令行设置环境变量,立即生效。
export PYTHONPATH=$PYTHONPATH:<你的要加入的路径>
export PYTHONPATH=$PYTHONPATH:/root/.local/share/virtualenvs/create_a_vip_student-bxPVtGy6/lib/python3.7/site-packages:
除此之外,或许你为了实现一个功能还引入了本工程中的的其他包,那么就还需要将工程的根目录加入到环境变量中。
最后就像这样:
export PYTHONPATH=$PYTHONPATH:/root/.local/share/virtualenvs/create_a_vip_student-bxPVtGy6/lib/python3.7/site-packages:/var/lib/jenkins/workspace/create_a_vip_student/tools/dada:/var/lib/jenkins/workspace/create_a_vip_student