python的模块搜索路径
思考: 发现有时候在IDE写好的工程通过IDE启动的时候没有任何问题,但是脱离IDE的环境后运行就会报错,出现找不到模块的情况,由此考虑一个问题,当使用import XXX 或者 from XXX import XXX 来导入某个模块使用的时候,那么python解释器又是如何找到这个模块和模块的相关文件并加载它呢?
- 其实这是由python内置模块sys中变量sys.path的列表值来决定的。
我们看一段代码
import sys
print('\n'.join(sys.path))
可以在桌面上新建一个path.py文件,写入该代码,后打开cmd执python path.py,可以看到类似如下的结果:
C:\Users\username\Desktop>python path.py
C:\Users\username\Desktop
C:\Program Files\Python\Python38\python38.zip
C:\Program Files\Python\Python38\DLLs
C:\Program Files\Python\Python38\lib
C:\Program Files\Python\Python38
C:\Users\username\AppData\Roaming\Python\Python38\site-packages
C:\Program Files\Python\Python38\lib\site-packages
C:\Program Files\Python\Python38\lib\site-packages\win32
C:\Program Files\Python\Python38\lib\site-packages\win32\lib
C:\Program Files\Python\Python38\lib\site-packages\Pythonwin
也就是说,你当前工程所导入的模块都必须在上述路径中。而这些值其实是python解释器在启动的过程中将如下的路径加载到sys.path中去。
- 启动脚本所在的目录
- PYTHONPATH环境变量中配置的目录
- 标准库目录,其实就是安装python时一起安装进系统的模块
- lib/site-packages下面.pth文件中指定的路径
- 自己扩展的第三方库,这种其实就还是安装在lib/site-packages 中的
基于此,可以多想一点,既然python解释器是通过sys.path 来查找模块的,这就意味着我们可以通过自行修改里边的内容,达到动态改变模块搜索路径目的。

浙公网安备 33010602011771号