在我的机器上,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/