系统:Windows 7
语言版本:Anaconda3-4.3.0.1-Windows-x86_64
编辑器:pycharm-community-2016.3.2
Python:3.6.0
- 这个系列讲讲Python运行环境及条件
- 今天讲讲环境变量:sys.path
Part 1:背景介绍
- 当代码从本台设备复制到另外一台设备时候,有的时候运行不了,提示某些模块找不到,如下图的提示。
- 示例的文件结构如下图,在path_explain包下,有两个包pack1,pack2
- path_explain下有一个path_example_3模块
- pack1下有一个test_11模块
- pack2下有一个path_example_1、path_example_2模块
错误提示
1.png
代码文件组织结构
2.png
- test_11内含有函数add
3.png
- 想实现的功能如下:
- path_example_1中调用add函数
- path_example_2中调用add函数
- path_example_3中调用add函数
Part 2:path_example_1中调用add函数
- path_example_1.py与test_11.py分别在两个平行的包pack1,pack2下面
2.png
import sys
print(sys.path)
from pack1.test_11 import add
x = 1
y = 2
z = add(x, y)
print(z)
代码运行结果
7.png
- 提示无法找到pack1
- 我们在导入模块时,本质上是Python解释器在sys.path的地址中寻找对应的文件,我们在运行某个程序时,会默认将当前文件所在路径加入到sys.path中,其余的地址是默认的
- 我们发现sys.path地址中存在
E:\\Coding\\E_PythonWriting,这个是Pycharm自己加的,因为在Pycharm中我们打开这个文件夹作为根目录 - 在cmd中运行
path_example_1,发现路径中就没有E:\\Coding\\E_PythonWriting
- 我们发现sys.path地址中存在
- 因为在当前所有搜索路径中无法找到pack1,所以就会报错
6.png
Part 3:path_example_2中调用add函数
- path_example_2.py与path_example_1.py都在包pack1下
- path_example_2.py与test_11.py分别在两个平行的包pack1,pack2下面
2.png
import sys
import os
# 搜索路径改变
# 修改路径前
print(sys.path)
path_1 = os.path.abspath(__file__)
folder_address = os.path.dirname(path_1)
program_path = os.path.dirname(folder_address)
# 修改路径后
print("\n")
sys.path.append(program_path)
print(sys.path)
from pack1.test_11 import add
x = 1
y = 2
z = add(x, y)
print(z)
代码运行结果
8.png
- 运行正常,没有报错
- sys.path中新增了一个地址,为本py文件的上一级文件夹地址,这样就可以搜索到与本文件同级别的pack1包
- 当我们项目中有多个包,并且包之间存在引用,那么我们需要将该包的上一级文件夹加入sys.path中。关于加入sys.path的方法有3种(或者还有更多)
- 方法1:如本文所示,在代码中增加,这种增加是临时的,运行完毕,则释放
- 方法2:在我的电脑中的环境变量中增加,这种方法是永久的
- 方法3:在Python的安装环境中的
Lib\site-packages环境下加入pth文本文件,文件中写入项目地址,这个方法是永久的
- 建议采用方法1,因为在自己编写的不同项目中,可能采用了同一个包名,但是功能略有不同,这样在搜索模块时会弄错
Part 4:path_example_3中调用add函数
- path_example_3.py在test_11.py对应包pack1的上一级文件夹中
2.png
import sys
from pack1.test_11 import add
print(sys.path)
x = 1
y = 2
z = add(x, y)
print(z)
运行结果
10.png
- 按照上文的解释,代码所在文件夹会纳入sys.path中,而pack1属于该文件夹的子文件夹下,会搜索到,所以无需修改sys.path
本文为原创作品,欢迎分享朋友圈
长按图片识别二维码,关注本公众号
Python 优雅 帅气
12x0.8.jpg











网友评论