天天看点

python的模块查找路径

python中每一个 .py文件即为一个模块,当我们想使用第三方模块时,首先则是使用import将模块导入进来,但是import会在哪些路径里寻找模块呢,接下来总结一下:

简单的说我们可以使用一下代码查看模块所在路径:

import sys
print(sys.path)
           

返回的结果是一个列表,该列表中列出了寻找模块时的路径,列表中的内容基本上来自以下几个来源:

  • 当前文件夹路径
  • PYTHONPATH环境变量所对应文件路径
  • Python安装的标准链接库等文件夹路径
  • PTH文件列出的文件夹路径

所以,当我们编写好一个.py文件之后,如果我们想在另一个.py文件中import该模块(即.py文件),对应有四种方法可以实现让python解释器找到该模块。

  1. 将该模块放在当前路径
  2. 设置PYTHONPATH环境变量为模块所在路径
  3. 将模块放在标准链接库等文件夹路径中
  4. 在PTH文件中增加该模块所在路径即可

前面3点都很好理解,关于最后一点,以下详细说明:

PTH文件的存放位置在不同的操作系统中有所差异,但是通过site这个内置模块的getsitepackages()函数可以获取正确的位置。如我的电脑显示如下:

python的模块查找路径

可以看见返回了两条路径,我在其中一个路径下面新建workspace.pth文件,然后编写该文件,一行一个路径如:

C:\ProgramData
D:\tmp
           

以后便是我在该.pth文件里所对应的路径下面编写的模块,在另外的模块中使用import导入时便不会出错了。你可以使用sys.path输出,也会看见C:\ProgramData,D:\tmp这两条路径。

另外:

1. 在Windows中用SET PYTHONPATH = 路径1;路径2的方式来设置PATHONPATH环境变量。

2. 也可以使用如下代码设置:

sys.path.append('c:\workspace')

3. 模块查找的顺序为:内存中已经加载的模块–>内置模块–>sys.path路径中包含的模块

当一个模块被import时,会发生以下事情:

1. 在sys.path寻找模块

2. 加载、编译模块的程序代码

3. 创建空的模块对象

4. 在sys.modules中记录该模块

5. 执行模块中的程序代码及相关定义

哈哈,写得比较乱,当然我自己可以看懂,目的也是方便自己以后查阅,要是哪位网友逛到这儿来了,你就将就方便看吧,哈哈。。