Python如何在只有文件名的情况下找到模块文件?
我到处看到Python代码在用 import sys
或 import mymodule
来导入模块。
那么,如果没有提供目录或路径,解释器是怎么找到正确的文件的呢?
4 个回答
9
它使用了一个叫做 PYTHONPATH 的东西,这个东西是一个环境变量,用来寻找包(包含 __init__.py
文件的文件夹)和模块(如果模块已经加载过一次,它会从 sys.modules
中获取这个模块的对象)。
28
另外,你可以通过使用 sys
模块来查看当前的路径。
import sys
print(sys.path)
76
http://docs.python.org/3/tutorial/modules.html#the-module-search-path
6.1.2. 模块搜索路径
当我们导入一个叫做
spam
的模块时,解释器首先会查找是否有一个内置的模块叫这个名字。如果没有找到,它就会在一个叫sys.path
的目录列表中寻找一个名为spam.py
的文件。sys.path
是从以下位置初始化的:
- 包含输入脚本的目录(如果没有指定文件,就是当前目录)。
PYTHONPATH
(这是一个目录名称的列表,语法和 shell 变量PATH
一样)。- 与安装相关的默认值。
注意:在支持符号链接的文件系统中,包含输入脚本的目录是在跟随符号链接后计算得出的。换句话说,包含符号链接的目录不会被添加到模块搜索路径中。
初始化后,Python 程序可以修改
sys.path
。运行的脚本所在的目录会被放在搜索路径的最前面,优先于标准库的路径。这意味着在那个目录里的脚本会被加载,而不是库目录中同名的模块。如果不是故意这样做,这会导致错误。有关更多信息,请参见标准模块部分。
关于“与安装相关的默认值”的信息,请查看 site
模块 的文档。