在Conda环境中(这里base
),我对python路径中目录的顺序感到惊讶:
python -c "import sys; print(sys.path)"
['',
'/export/projects/III-data/wcmp_bioinformatics/db291g/miniconda3/lib/python37.zip',
'/export/projects/III-data/wcmp_bioinformatics/db291g/miniconda3/lib/python3.7',
'/export/projects/III-data/wcmp_bioinformatics/db291g/miniconda3/lib/python3.7/lib-dynload',
'/export/home/db291g/.local/lib/python3.7/site-packages',
'/export/projects/III-data/wcmp_bioinformatics/db291g/miniconda3/lib/python3.7/site-packages']
如您所见,我的本地非Conda路径:
/export/home/db291g/.local/lib/python3.7/site-packages
位于Conda对应项之前:
/export/projects/III-data/wcmp_bioinformatics/db291g/miniconda3/lib/python3.7/site-packages
这意味着在miniconda3/lib/python3.7/site-packages
中安装的包如果在.local/lib/python3.7/site-packages
中找到,将被忽略。事实上,在.local/lib/python3.7/site-packages
中,我使用的是NumPy 1.20,但在Conda环境中,我需要1.19,它已正确安装,但已被1.20取代。这似乎违背了使用Conda的意义。
是我的配置有问题,还是我遗漏了什么?
部分信息:
which python
/export/projects/III-data/wcmp_bioinformatics/db291g/miniconda3/bin/python
python -V
Python 3.7.12
which conda
/export/projects/III-data/wcmp_bioinformatics/db291g/miniconda3/bin/conda
conda --version
conda 4.11.0
这是预期行为(请参阅PEP 370),也是Anaconda recommended against user-level package installations的部分原因。
The site
module负责在初始化时设置sys.path
。The code in site.py
在附加前缀站点之前专门附加用户站点,这就是导致此优先顺序的原因。根据PEP 370的动机,用户将在系统级别安装一个Python,但希望在用户级别确定他们安装的包的优先级,因此用户站点应该在前缀站点之前加载。
有几种方法可以避免加载用户级网站包。
PYTHONNOUSERSITE
将切换用户级site-packages
的加载。即
PYTHONNOUSERSITE=1 python -c "import sys; print(sys.path)"
-s
标志或者,Python二进制文件有一个-s
参数,专门用于禁用用户级站点包。
python -s -c "import sys; print(sys.path)"
The Conda recommendation是完全避免pip install --user
,这将被解释为应该从系统中删除~/.local/lib/python*
文件夹。
The Conda Forge package conda-ecosystem-user-package-isolation
将在环境激活期间自动设置PYTHONNOUSERSITE=1
。
如果希望默认情况下所有环境都具有此类隔离,请考虑将以下内容添加到create_default_packages
配置列表:
conda config --add create_default_packages conda-ecosystem-user-package-isolation
请注意,此程序包还设置R_LIBS_USER="-"
,将所有R环境与用户级别程序包隔离。
如果您需要更精细的选项,我还创建了仅设置PYTHONNOUSERSITE=1
和PYTHONPATH=""
环境变量的单独程序包,可以使用:
## set PYTHONNOUSERSITE=1
conda install merv::envvar-pythonnousersite-true
## clear PYTHONPATH
conda install merv::envvar-pythonpath-null
这篇关于Conda环境中意外的Python路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持吉威生活!
[英文标题]Unexpected python paths in conda environment
声明:本媒体部分图片、文章来源于网络,版权归原作者所有,如有侵权,请联系QQ:330946442删除。