[英]Unexpected Python paths in Conda environment
在 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
中的 Python 包如果也在.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
這是預期的行為(參見PEP 370 ), 也是 Anaconda 推薦反對用戶級 package 安裝的部分原因。
site
模塊負責在 Python 初始化時設置sys.path
。 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)"
Conda 的建議是完全避免pip install --user
,這將被解釋為應該從系統中刪除~/.local/lib/python*
文件夾。
Conda Forge package conda conda-ecosystem-user-package-isolation
將在環境激活期間自動設置PYTHONNOUSERSITE=1
。
如果您希望所有環境默認都具有這種隔離,請考慮將其添加到create_default_packages
配置列表中:
conda config --add create_default_packages conda-ecosystem-user-package-isolation
請注意,此 package 還設置R_LIBS_USER="-"
,將任何 R 環境與用戶級包隔離。
如果您想要更精細的選項,我還創建了單獨的包,僅設置PYTHONNOUSERSITE=1
和PYTHONPATH=""
環境變量,可以安裝:
## set PYTHONNOUSERSITE=1
conda install merv::envvar-pythonnousersite-true
## clear PYTHONPATH
conda install merv::envvar-pythonpath-null
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.