写在前面
下面是在网上搜索了许多好心网友的答复,然后结合自己的自动化项目,实际操作可行后整理的。希望对大家有所帮助
1、 在import模块时,程序是如何去找到对应的module的?
这里我们将module分为三类:
(1)Python 标准库模块
(2)Python 第三方模块
(3)应用程序自定义模块
2、import的搜索顺序:
首先判断这个module是不是built-in即内建模块,如果是则引入内建模块,如果不是则在一个称为sys.path的list中寻找
sys.path在python脚本执行时动态生成,包括以下3个部分:
1、脚本执行的位置,即当前路径
2、环境变量中的PYTHONPATH, 即.bash_profilec.
3、安装python时的依赖位置
OK,好了,来举个实际例子看看
我有一个需求:test.py中需要导入BaiduHomePage类
运行时,报错如下:
Traceback (most recent call last):
File "d:/AutomatedTesting/WebAutomation/framework/testcase/test.py", line 1, in
from pageobjects.baidu_homepage import BaiduHomePage
ModuleNotFoundError: No module named 'pageobjects'
查看 sys.path,发现 framework 不在 list 中,当然就无法找到 pageobjects 模块
import sys
print(sys.path)
打印list如下:
['d:\\AutomatedTesting\\WebAutomation\\framework\\testcase', 'D:\\AutomatedTesting\\WebAutomation', 'D:\\Program Files\\Python3\\python37.zip', 'D:\\Program Files\\Python3\\DLLs', 'D:\\Program Files\\Python3\\lib', 'D:\\Program Files\\Python3', 'C:\\Users\\Chengl\\AppData\\Roaming\\Python\\Python37\\site-packages', 'D:\\Program Files\\Python3\\lib\\site-packages']
解决思路:添加模块搜索路径,常用以下三种方式
(1)动态增加路径
临时生效,对于不经常使用的模块,这通常是最好的方式,因为不必用所有次要模块的路径来污染 PYTHONPATH。
(2)修改 PYTHONPATH 变量
永久生效,对于在许多程序中都使用的模块,可以采用这种方式。这将改变所有 Python 应用的搜索路径,因为启动 Python 时,它会读取这个变量,甚至不同版本的 Python 都会受影响。
(3)增加 .pth 文件
永久生效,这是最简单的、也是推荐的方式。Python 在遍历已知的库文件目录过程中,如果遇到 .pth 文件,便会将其中的路径加入到 sys.path 中,于是 .pth 中所指定的路径就可以被 Python 运行环境找到了。
动态增加路径
通过 sys 模块的 append() 方法在 Python 环境中增加搜索路径:
import sys
sys.path.append("d:\\AutomatedTesting\\WebAutomation\\framework\\")
再次查看sys.path,
['d:\\AutomatedTesting\\WebAutomation\\framework\\testcase', 'D:\\AutomatedTesting\\WebAutomation', 'D:\\Program Files\\Python3\\python37.zip', 'D:\\Program Files\\Python3\\DLLs', 'D:\\Program Files\\Python3\\lib', 'D:\\Program Files\\Python3', 'C:\\Users\\Chengl\\AppData\\Roaming\\Python\\Python37\\site-packages', 'D:\\Program Files\\Python3\\lib\\site-packages', 'd:\\AutomatedTesting\\WebAutomation\\framework\\']
可以看到,路径被成功添加进去了,再次执行导入可以正常使用。
修改 PYTHONPATH 变量
Windows环境:
添加PYTHONPATH环境变量,value为:d:\AutomatedTesting\WebAutomation\framework\
备注:环境变量配置成功后,请重启编辑器
linux环境:
打开并编辑 bashrc:
$ vim ~/.bashrc
将以下内容附加到文件末尾:
export PYTHONPATH=$PYTHONPATH:/home/wang/workspace
不要忘记重新加载 shell,方法是退出并重新启动,或者在命令行重新加载配置文件:
$ source ~/.bashrc # 或者 . ~/.bashrc
增加 .pth 文件
在 Python 的安装目录 Python3\Lib\site-packages 下添加一个扩展名为 .pth 的配置文件(如:workspace.pth),内容为当前项目的workspace路径:
d:\AutomatedTesting\WebAutomation\framework\
备注:如果其他project的根目录不在 d:\AutomatedTesting\WebAutomation\framework\ 目录下,将相应路径添加到 workspace.pth 即可