首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Conda环境中的意外Python路径

Conda环境中的意外Python路径
EN

Stack Overflow用户
提问于 2022-02-02 15:36:21
回答 1查看 1.8K关注 0票数 1

在Conda环境中(这里是base),我对Python中目录的顺序感到惊讶:

代码语言:javascript
复制
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路径:

代码语言:javascript
复制
/export/home/db291g/.local/lib/python3.7/site-packages

出现在Conda的对手面前:

代码语言:javascript
复制
/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 v1.20,但是在Conda环境中,我需要v1.19,它已经正确安装,但被v1.20所取代。这似乎没有达到使用Conda的目的。

我的配置有什么问题吗?还是我在这里遗漏了什么?

一些信息:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-02 18:48:38

这是预期的行为(请参阅佩普370)以及Anaconda建议不要安装用户级别的包。的部分原因。

模块负责在sys.path初始化时设置sys.pathsite.py在附加前缀站点之前特别地附加了用户站点,这就是导致这种优先级的原因。佩普370的动机是,用户将在系统级别安装Python,但希望在用户级别对安装的包进行优先级排序,因此用户站点应该在前缀站点之前加载。

选项

有几个选项可以避免用户级的站点包被加载。

1:环境变量

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

代码语言:javascript
复制
PYTHONNOUSERSITE=1 python -c "import sys; print(sys.path)"

2: Python -s标志

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

代码语言:javascript
复制
python -s -c "import sys; print(sys.path)"

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

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

4:自动Conda环境变量

Conda Forge封装

conda-ecosystem-user-package-isolation将在环境激活期间自动设置PYTHONNOUSERSITE=1

如果您希望所有环境默认具有这样的隔离,那么请考虑将其添加到create_default_packages配置列表中:

代码语言:javascript
复制
conda config --add create_default_packages conda-ecosystem-user-package-isolation

请注意,此包还设置了R_LIBS_USER="-",将任何R环境与用户级包隔离开来。

替代包

如果您想要一个更细粒度的选项,我还创建了单独的包,这些包只设置PYTHONNOUSERSITE=1PYTHONPATH=""环境变量,这些变量可以安装在:

代码语言:javascript
复制
## set PYTHONNOUSERSITE=1
conda install merv::envvar-pythonnousersite-true

## clear PYTHONPATH
conda install merv::envvar-pythonpath-null
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70958434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档