python - PYTHONPATH 如何填充 sys.path 是否可靠并记录在案?

标签 python environment-variables python-import

在我的机器上,PYTHONPATH 中的值似乎被插入到 sys.path 中:

  • 从索引 1 开始
  • 保留顺序
  • 去重

例如,使用 PYTHONPATH=/spam:/eggs:/spam 然后检查 python -m site,我得到如下结果:

sys.path = [
    something,
    '/spam',
    '/eggs',
    more,
    stuff,
    after
]

这在 Python 2 和 Python 3 上似乎是相同的行为。问题是,这种对 PYTHONPATH 的处理有多少是有记录的/可靠的,如果有的话在其他平台上可能会有所不同?这是嵌入到解释器中,还是由 site.py 处理和/或有被系统管理员“调整”的危险?

我在文档中看不到它的解释 here ,它只是说 sys.path 是“增强的”(而且,与文档相反,不存在的目录似乎不会被默默地忽略)。

最佳答案

让我们往下看。


  • beginning at index 1

那是可靠的。如 PYTHONPATH docs 中所述,

The default search path is installation dependent, but generally begins with prefix/lib/pythonversion (see PYTHONHOME above). It is always appended to PYTHONPATH.

An additional directory will be inserted in the search path in front of PYTHONPATH as described above under Interface options. The search path can be manipulated from within a Python program as the variable sys.path.

在 PYTHONPATH 之前插入一个目录,它可能是当前目录、脚本目录或其他目录,具体取决于您运行 Python 的方式。附加其他目录。 site module还将向 sys.path 添加一些模块,但 site 也会添加:

Importing this module will append site-specific paths to the module search path and add a few builtins...


  • order preserved

我认为这在任何地方都没有明确记录,但搜索路径顺序很重要,更改它会破坏向后兼容性,我认为他们不会轻易做出。


  • de-duplicated

这是 site 模块的一个未记录的效果。如果您使用禁用 site-S 标志运行 Python,则不会发生这种情况。您可以在 site.removeduppaths 中查看代码

关于python - PYTHONPATH 如何填充 sys.path 是否可靠并记录在案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49020495/

相关文章:

python - 如何打印查询结果并将其保存在 pandas 数据框中

environment-variables - "system32\java.exe"和 "Program Files\Java\jdk1.6.0_33\bin\java.exe"有什么区别?

Python 项目结构和相关导入

python - 如何重新加载使用 `from module import *` 导入的 python 模块

python - flask 错误 : AttributeError: 'NoneType' object has no attribute 'get'

python - Discord - BOT 发送私有(private)消息

Python 3 动态分配基类

cmake - Clion 或 cmake 看不到环境变量

java - 以独立于平台的方式将环境变量传递给 JVM

python - 使用 Visual Studio Code 在 Python 中逐步调试导入的模块