深入Python中的sys.path初始化
理解Python的sys.path的初始化过程对于理解Python的模块搜索路径至关重要。尽管存在 PYTHONPATH 专门驱动此初始化的误解,但 Python 复杂的算法在各种其他来源中也发挥了作用。
以下步骤阐明了此过程:
sys.executable、sys.exec_prefix 和 sys 的初始化.prefix
- Python 根据操作系统的信息仔细识别其位置,镜像 sys.executable 中实际物理可执行文件的路径。
- 可执行文件中的 pyvenv.cfg 文件目录或上一级保存影响 sys.prefix 的配置选项。值得注意的是,home 配置可以覆盖包含 sys.executable 的默认目录。
- 如果 PYTHONHOME 环境变量存在,它将覆盖之前设置的 sys.prefix 和 sys.exec_prefix 值。
- 失败在上述条件下,这些值是通过从 sys.executable 向后遍历、寻找符号链接或标志性文件来建立目录及其前缀而得出的。
sys.path 的确定
-
sys.path 的初始值包括:
- 包含执行脚本的目录。
- PYTHONPATH 的内容(如果已设置)。
- Python zip 文件的路径。
- Windows 上的注册表项(如果存在)将被读取以获取其他路径。
- 包括 PYTHONPATH 的编译时值。
- 在 Mac 和 Linux 上,附加 sys.exec_prefix 的值。
初始化后操作
- 站点模块已加载,动态添加基于 sys.prefix 和 sys.exec_prefix 的路径。
- 从添加的路径中检查配置文件以进行进一步的 sys.path 修改。
陷阱和重要说明
- 错误设置 home = pyvenv.cfg 中的 sys.prefix 值可能为空,从而导致回退到预编译默认值。
- PYTHONHOME 环境变量的存在可能会破坏 Linux 和 Mac 上的 pyvenv.cfg 设置。
- Windows 上缺少 PYTHONHOME,以及 pyvenv.cfg 缺少 home = ,可能会导致后备 sys.prefix 值。
- 如果 sys.prefix 在 sys.path 期间仍未解析初始化时,Windows 开始详细搜索标志性文件以确定它。
以上是Python 如何初始化 sys.path?的详细内容。更多信息请关注PHP中文网其他相关文章!