Conda环境中意外的Python路径 [英] Unexpected python paths in conda environment

查看:0
本文介绍了Conda环境中意外的Python路径的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在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.pathThe code in site.py在附加前缀站点之前专门附加用户站点,这就是导致此优先顺序的原因。根据PEP 370的动机,用户将在系统级别安装一个Python,但希望在用户级别确定他们安装的包的优先级,因此用户站点应该在前缀站点之前加载。

选项

有几种方法可以避免加载用户级网站包。

1:环境变量

环境变量PYTHONNOUSERSITE将切换用户级site-packages的加载。即

PYTHONNOUSERSITE=1 python -c "import sys; print(sys.path)"

2:Python-s标志

或者,Python二进制文件有一个-s参数,专门用于禁用用户级站点包。

python -s -c "import sys; print(sys.path)"

3:删除(并避免将来)用户级安装

The Conda recommendation是完全避免pip install --user,这将被解释为应该从系统中删除~/.local/lib/python*文件夹。

4:自动CONDA环境变量

Conda Forge包

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=1PYTHONPATH=""环境变量的单独程序包,可以使用:

进行安装
## set PYTHONNOUSERSITE=1
conda install merv::envvar-pythonnousersite-true

## clear PYTHONPATH
conda install merv::envvar-pythonpath-null

这篇关于Conda环境中意外的Python路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆