sys.path 并不总是/可靠地由 sitecustomize 设置——如何可靠地覆盖它?

问题描述 投票:0回答:1

我有一个使用嵌入式Python的应用程序,其中包括

python.exe
。我添加了一个
sitecustomize.py
来设置
sys.path
,例如:

import sys
sys.path = ['.','.\\python310.zip','.\\Lib','.\\Lib\\site-packages']

这对我有用,我可以在运行时看到这条路径

python.exe
。但这对同事不起作用,他们的环境显示出不同的
sys.path

['.','.\\python310.zip']

他们从同一文件夹位置但在不同主机上的同一安装中调用相同的命令。

我知道还有

._pth
(或
.pth
)文件和
pyvenv.cfg
可以对
sys.path
PYTHONPATH
环境变量产生影响。然后还有
PYTHONSTARTUP
usercustomize
PYTHONUSERBASE
sysconfig
九个‘方案’🤦。

要设置的所有引导选项是什么

sys.path
以及优先级是什么?

site.py
在其中扮演什么角色?用户包是否优先于站点包,并且站点之上是否还有另一个“全局”级别可以覆盖所有内容?

我真的想根据安装文件布局破坏除了我自己的路径之外的所有内容。如何定义我的嵌入式环境,使其不受该环境外部设置的影响?

python pythonpath python-embedding
1个回答
0
投票

我在https://docs.python.org/3/library/sys_path_init.html#sys-path-init

找到了我正在寻找的答案

看起来评估顺序是

  1. PYTHONPATH
    环境变量。
  2. sitecustomize.py
    .
  3. ._pth
    文件。
  4. pyvenv.cfg

我的测试表明,即使

sitecustomize.py
设置了显式
sys.path
,这也会受到
._pth
文件的影响。

import site
中的
_pth
语句会将特定于站点的路径(例如站点包)附加到模块搜索路径。这包括评估任何
.pth
(不含
_
)文件。

如果找到

pyvenv.cfg
文件,无论之前的配置如何,它都会更改环境。

© www.soinside.com 2019 - 2024. All rights reserved.