Python如何在只有文件名的情况下找到模块文件?

77 投票
4 回答
64510 浏览
提问于 2025-04-17 18:09

我到处看到Python代码在用 import sysimport 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 模块 的文档。

撰写回答