Python 的 pth 文件:在程序启动前自动执行命令
Python 的 pth 文件提供了在任何 Python 解释器执行前执行命令的能力,可以方便的执行一些初始化脚本
pth 文件的能力
Python 解释器在启动时会自动 import site 模块(除非启动时指定 -S flag),而 site 模块有一个行为就是会寻找 site-packages 目录(最常用的场景就是我们安装包的目录)下的所有 .pth
文件并依次「执行」它。
需要注意的是, pth
实质上并不是脚本,它的定义是「path configuration file」,格式是每行一个「additional items (one per line) to be added to sys.path
」,实际上,它每一行可以是下面的值之一:
- 空行、注释行(以 # 开头):跳过
- 以
import
开头的字符串:会被 exec() 解释执行 - 其他字符串:会被追加进
sys.path
之中
因此,利用第二个能力,我们实质上可以任意执行我们需要的脚本!
🗒️ 注:如果脚本执行出现异常,只会打印出错误而不会阻止解释器的继续执行
可用性 & 执行时机
在 Python 3 的所有版本可用
相关 pth
文件会在 python 解释器启动时执行 —— 这包括执行脚本前、启动解释器前、执行任何用 python 写的程序前(如 pip)
当存在多个 pth
文件时,将采用字母序的方式依次执行 —— 一个值得强调的点是,python 的 virtualenv 就是通过 _virtualenv.pth
执行的 —— 这意味着,我们应当注意 pth
的命名以让其确保在 venv 之前或之后运行