簡體   English   中英

Conda 環境中出現意外的 Python 路徑

[英]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,但希望優先考慮他們在用戶級別安裝的軟件包,因此用戶站點應在前綴站點之前加載。

選項

有幾個選項可以避免加載用戶級站點包。

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 環境變量

康達鍛造package

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=1PYTHONPATH=""環境變量,可以安裝:

## 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM