Python 模块搜索路径介绍,Python 模块搜索路径中的目录有哪些
本节所讲述的 Python 模块搜索路径,同样适用于包,因为包是特殊的模块。
Python 模块搜索路径
Python 模块搜索路径(Module Search Path)用于搜索需要载入的 Python 模块,在 Python 启动后,他与sys
模块的path
变量是等同的。
模块搜索路径并非单一的路径,这一点和环境变量PATH
类似,他可以指向多个包含 Python 模块的文件夹,或zip
压缩文件。此外,搜索路径可以包含绝对路径或相对路径,比如,''
是一个表示当前目录的相对路径。
如何查看 Python 模块搜索路径?
在 Python 的交互模式中,输入并执行import sys
和sys.path
两行代码,即可查看sys.path
表示的模块搜索路径。如果是py
文件,则可将sys.path
替换为print(sys.path)
。
import sys
sys.path
['', '…\\python312.zip', '…', '…\\Lib', '…\\Lib\\site-packages']
import sys
sys.path
['', '/usr/lib64/python312.zip', '/usr/lib64/python3.12', '/usr/lib64/python3.12/lib-dynload', '/usr/lib64/python3.12/site-packages', '/usr/lib/python3.12/site-packages']
# 显示 sys.path 表示的 Python 搜索路径
import sys
print(sys.path)
Python 模块搜索路径的优先级
在sys
模块中,保存 Python 模块搜索路径的变量path
是一个列表对象,其第一个元素表示的路径,首先被用于模块的搜索,如果模块不存在则使用下一个元素,直至模块被找到或抵达列表末尾。
Python 模块搜索路径中的目录
Python 模块搜索路径一般包含以下几种类别的目录,被运行目标所在的目录或当前工作目录,环境变量包含的目录,标准/扩展库目录,第三方包目录,pth
文件中的目录,以及 Windows 注册表中的目录。
Python 脚本目录或当前目录
当你使用 Python 运行脚本文件时,模块搜索路径的第一项是脚本文件所在的目录。当执行包含__main__.py
的文件夹或zip
文件时,模块搜索路径的第一项为文件夹或zip
文件所在的目录。
如果未指定运行目标,那么模块搜索路径的第一项为当前工作目录,该目录可能表述为相对路径''
。当你在命令行输入python
或python3
进入 Python 交互模式,或使用-c
选项执行代码,-m
选项执行模块时,搜索路径的第一项等价于命令行的当前目录。
脚本文件run.py
显示了搜索路径的第一个元素,在使用命令行运行该文件后,我们将看到run.py
所在的目录。
# 显示 sys.path 的第一个元素,他是该脚本文件所在的目录
import sys
print(f'脚本位于:{sys.path[0]}')
脚本位于:…\import_system
脚本位于:…/import_system
压缩文件run.zip
包含脚本文件__main__.py
,将run.zip
作为执行目标,结果显示脚本文件位于zip
文件中。
# 显示 sys.path 的第一个元素,他是 __main__.py 所在 zip 文件的路径
import sys
print(f'__main__.py 位于:{sys.path[0]}')
__main__.py 位于:…\import_system\zip\run.zip
__main__.py 位于:…/import_system/zip/run.zip
在命令行中使用-c
选项运行 Python 代码,显示模块搜索路径的第一项。
python -c "import sys;print(f'path[0] = [{sys.path[0]}]')"
path[0] = []
python3 -c "import sys;print(f'path[0] = [{sys.path[0]}]')"
path[0] = []
环境变量 PYTHONPATH 中的目录
当你在操作系统中设置了环境变量PYTHONPATH
后,该变量所包含的一系列目录或zip
文件路径,将被添加至 Python 模块搜索路径。
Python 标准/扩展库目录
Python 自身拥有一个标准库,其中含有大量功能各异的标准模块,模块搜索路径需要包含该标准库的目录,以及标准库zip
文件的路径。Python 扩展库提供标准库可能依赖的 API 支持,如果需要,扩展库的目录也会包含在模块搜索路径中。
Python 标准/扩展库在各操作系统中的位置
在 Windows 中,Python 标准库一般位于安装目录的Lib
文件夹,标准库zip
文件位于安装目录本身,扩展库位于安装目录的DLLs
文件夹。
在 UNIX/Linux/macOS 中,Python 标准库可能位于lib/python<X>.<Y>
,标准库zip
文件位于lib
,扩展库位于lib/python<X>.<Y>/lib-dynload
。这里的lib
一般是指/usr/lib
,或同一位置的lib64
,X
为 Python 主版本号,Y
为次版本号。
如何查看 Python 标准/扩展库的位置?
当不能确定标准/扩展库的位置时,可以在 Python 的交互模式中,输入import sys
,sys.prefix
,sys.exec_prefix
几行代码,来显示其相关信息。其中sys.prefix
对应了标准库目录,sys.exec_prefix
对应了扩展库目录。
如果是py
文件,则可以使用print
函数在终端显示他们。
import sys
sys.prefix
'…'
sys.exec_prefix
'…'
import sys
sys.prefix
'/usr'
sys.exec_prefix
'/usr'
# 显示标准/扩展库目录
import sys
print(sys.prefix)
print(sys.exec_prefix)
Python 第三方包目录
Python 模块搜索路径还将包括第三方包的目录,一般情况下,他指向一个名为site-packages
的文件夹,其中包含自行构建或安装的 Python 包。
第三方包
要了解第三方包的具体位置,你可以查看Python 第三方包的位置一段。
Python pth 文件中的目录
如果第三方包文件夹包含任何的pth
文件,则这些文件中按行列出的目录或zip
文件路径,也将成为 Python 模块搜索路径的一部分。
Windows 注册表中的目录
在 Windows 系统中,注册表键HKEY_CURRENT_USER\Software\Python\PythonCore\<X>.<Y>\PythonPath
,HKEY_LOCAL_MACHINE\Software\Python\PythonCore\<X>.<Y>\PythonPath
的默认值所包含的目录或zip
文件路径,将被添加至模块搜索路径。上述中的X
为 Python 主要版本号,Y
为次要版本号。
内容分类
源码
print_path.py·codebeatme/python-reference·GitHub
run.py·codebeatme/python-reference·GitHub
zip/__main__.py·codebeatme/python-reference·GitHub
print_prefix.py·codebeatme/python-reference·GitHub