Python 的 sys.path 是从哪里初始化的?
Python 的 sys.path,包含 Python 搜索要导入的模块的目录,经过复杂的初始化过程来确定其初始值。以下是其设置方式的详细说明:
sys.executable 确定
- Python 在文件系统上找到其物理位置并将其用作 sys 的值.executable.
sys.exec_prefix 和 sys.prefix 初始化
- Python 读取与 sys.executable 同一目录下的 pyvenv.cfg 文件或上一个目录。
-
如果文件存在,它将提取以下信息:
- 在 Windows 上:如果“applocal = true,”sys.prefix 设置为包含 sys.executable 的目录。否则,它使用“home = ”指令。
- 在 Linux/Mac 上:Sys.exec_prefix 设置为“home = ”指示。除非 PYTHONHOME 环境变量存在,否则 Sys.prefix 也设置为该值。
- 如果 pyvenv.cfg 不存在或不包含必要的信息,Python 会尝试确定 sys.exec_prefix和 sys.prefix 通过从 sys.executable 向后走,寻找特定的标志性文件。
sys.path 初始化
- Python 将正在执行的脚本的目录添加到 sys.path。
- 在 Linux/Mac 上,它添加 PYTHONPATH 环境变量(如果已设置)。
- 它包括zip 文件路径(/lib/python35.zip 或 path/to/python.zip)。
- 在 Windows 上,如果 pyvenv.cfg 中没有“applocal = true”,它会添加来自“HK_CURRENT_USERSoftwarePythonPythonCore<”的子项;DLLVersion>PythonPath。”
- 在 Windows 上且 pyvenv.cfg 中没有“applocal = true”,并且如果未找到 sys.prefix,则会添加“HK_CURRENT_USERSoftwarePythonPythonCorePythonPath”的“核心内容”。 “
- 在 Windows 上并且 pyvenv.cfg 中没有“applocal = true”,它会添加来自“HK_LOCAL_MACHINESoftwarePythonPythonCorePythonPath”的子项。
- 在 Windows 上并且在 pyvenv.cfg 中没有“applocal = true” .cfg,如果未找到 sys.prefix,则会添加“HK_LOCAL_MACHINESoftwarePythonPythonCorePythonPath”的“核心内容”。
- 在 Windows 上且未设置 PYTHONPATH、未找到前缀且没有注册表项目前,它添加了 PYTHONPATH 的相对编译时值。
- 它在 PYTHONPATH 编译时宏中合并了相对于动态找到的 sys.prefix 的路径。
- 在 Linux/Mac 上,它添加了 sys.exec_prefix。在 Windows 上,它添加用于搜索 sys.prefix 的目录。
- 在 Windows 上,如果 pyvenv.cfg 中没有“applocal = true”,它会尝试通过在 sys.path 中定位标志性文件来查找 sys.prefix 。如果不成功,会将 sys.prefix 留空。
站点模块的其他修改
- 站点模块通过添加进一步修改 sys.path基于 sys.prefix、sys.exec_prefix 和特定于平台的路径的目录。
- 它检查这些新路径中的配置文件,可能会添加更多路径。
以上是Python 如何初始化 sys.path 列表?的详细内容。更多信息请关注PHP中文网其他相关文章!