如何使用 _pth 文件重写 Python 模块搜索路径
Python _pth 文件
_pth
文件和放置于第三方包的pth
文件类似,可以用来设置 Python 模块搜索路径,文件中的每一行,可对应一条采用绝对路径或相对路径的目录信息。
设置搜索路径
如果你想了解一些pth
文件的基本用法,可以查看使用 pth 文件设置 Python 模块搜索路径一段。
_pth 文件将重写 Python 模块搜索路径
与pth
文件不同,_pth
文件将重写整个 Python 模块搜索路径,如果你创建了_pth
文件,却没有在文件中指定任何目录,那么 Python 可能无法正常启动,因为缺少有效的搜索路径,会使 Python 无法找到运行所需的模块。
要让 Python 正确运行,至少应在_pth
文件中指定标准库和扩展库的目录。
_pth 文件中列出的目录不需要真实存在
与pth
文件不同,当_pth
文件包含不存在的目录时,他们依然会被添加至模块搜索路径。
模块搜索路径
要了解 Python 标准/扩展库的位置,你可以查看Python 标准/扩展库目录一段。
这里是一个可能适用于 Windows 的_pth
文件,他指出了标准库zip
文件的路径,以及标准/扩展库的目录。
# 标准库 zip 文件路径
python312.zip
# 标准/扩展库目录
.
# …
在 _pth 文件中使用 import site 添加 Python 第三方包目录
在编写代码方面,_pth
文件受到了更多的约束,仅限于使用import site
,该语句的效果是将第三方包目录添加至模块搜索路径,并使得这些目录中pth
文件可以被正常处理。
当然,以上对于第三方包目录和pth
文件的操作,是 Python 常规启动流程的一部分(当_pth
文件不存在时)。
在 _pth 文件中手动指定第三方包目录和使用 import site 之间的区别
虽然,你可以在_pth
文件中手动指定第三方包目录,但那会使pth
文件失效,只有导入site
模块后,pth
文件才能被识别。
# …
# 添加第三方包目录,并使目录中的 pth 文件可以被正常处理
import site
Python _pth 文件的名称和位置
不像pth
文件可以随意命名,_pth
文件的名称需要和 Python 可执行文件的名称保持一致,_pth
文件存放的位置,应该位于 Python 可执行文件所在的目录。
在 Windows 中为 Python 标准库 zip 文件创建 _pth 文件
在 Windows 系统中,_pth
文件的名称还可以与标准库zip
文件的名称一致,但这样的做法在其他操作系统中可能无效,如果你采用两种命名方式创建了两个_pth
文件,那么与 Python 可执行文件同名的_pth
文件将失效。
假设 Windows 中 Python 可执行文件为python.exe
,标准库zip
文件为python312.zip
,那么_pth
文件就可以命名为python._pth
或python312._pth
。
在 UNIX/Linux/macOS 中为多个 Python 可执行文件创建 _pth 文件
如果是 UNIX/Linux/macOS,则 Python 的可执行文件可能有多个。假设bin
目录中同时存在python3
和python3.12
,那么你可以在该目录新建两个_pth
文件,python3._pth
和python3.12._pth
,他们将分别对应在命令行输入python3
和python3.12
的情况。
Python _pth 文件中的相对路径
_pth
文件中的相对路径,是相对于_pth
文件所在的目录,而非 Python 的当前工作目录。在被添加至sys.path
时,他们会转换为等价的绝对路径。