在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 v1.20,但是在Conda环境中,我需要v1.19,它已经正确安装,但被v1.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发布于 2022-02-02 18:48:38
这是预期的行为(请参阅佩普370)以及Anaconda建议不要安装用户级别的包。的部分原因。
模块负责在sys.path初始化时设置sys.path。site.py在附加前缀站点之前特别地附加了用户站点,这就是导致这种优先级的原因。佩普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:删除(并避免未来)用户级安装。
Conda建议是为了完全避免pip install --user,这将被解释为应该从您的系统中删除~/.local/lib/python*文件夹。
4:自动Conda环境变量
Conda Forge封装
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-nullhttps://stackoverflow.com/questions/70958434
复制相似问题