Conda 建立 Python 虛擬環境不純淨的問題(2021.1.18)
阿新 • • 發佈:2022-05-26
Conda 建立 Python 虛擬環境不純淨的問題(2021.1.18)
目錄1. 產生環境
- Ubuntu 16.04;
- Conda 4.9.2;
- Python 3.6;
2. 問題描述
通過 Conda 命令建立 Python 虛擬環境後,利用 pip list
命令檢視包列表,發現有很多多餘的包,並不是一個乾淨的虛擬環境。問題出現的具體操作如下:
# 建立 Python 虛擬環境 $ conda create -n env python=3.6 # 啟用 Python 虛擬環境 $ conda activate env # 檢視包列表 $ pip list Package Version --------------- ------------------- autopep8 1.5.4 certifi 2020.12.5 cycler 0.10.0 kiwisolver 1.3.1 matplotlib 3.3.3 Pillow 8.0.1 pip 20.3.3 pycodestyle 2.6.0 python-dateutil 2.8.1 scipy 1.5.4 setuptools 51.1.2.post20210112 toml 0.10.2 wheel 0.36.2
3. 原因分析
經過調研發現並不是 Conda 建立的 Python 虛擬環境不純淨,而是 Pip 列出了使用者安裝的包。可以通過如下命令進行檢視:
# 檢視 sys.path,確認 pip 列出包的來源 $ python -m site sys.path = [ '/data/xxx', '/data/xxx/.anaconda3/envs/env/lib/python36.zip', '/data/xxx/.anaconda3/envs/env/lib/python3.6', '/data/xxx/.anaconda3/envs/env/lib/python3.6/lib-dynload', '/data/xxx/.local/lib/python3.6/site-packages', '/data/xxx/.anaconda3/envs/env/lib/python3.6/site-packages', ] USER_BASE: '/data/xxx/.local' (exists) USER_SITE: '/data/xxx/.local/lib/python3.6/site-packages' (exists) ENABLE_USER_SITE: True
可以看到 ENABLE_USER_SITE
的值為 True
,且 USER_SITE
的路徑為 /data/xxx/.local/lib/python3.6/site-packages
,檢視該路徑後發現 pip list
列出的包確實是該目錄下的。
4. 解決方法
瞭解了問題出現的原因,那我們只需要把 ENABLE_USER_SITE
的值設定為 FALSE
即可。具體的操作過程如下:
# 檢視 site.py 的位置 $ python -m site --help /data/xxx/.anaconda3/envs/env/lib/python3.6/site.py [--user-base] [--user-site] Without arguments print some useful information With arguments print the value of USER_BASE and/or USER_SITE separated by ':'. Exit codes with --user-base or --user-site: 0 - user site directory is enabled 1 - user site directory is disabled by user 2 - uses site directory is disabled by super user or for security reasons >2 - unknown error # 可以看到 site.py 的位置為 /data/xxx/.anaconda3/envs/env/lib/python3.6/site.py # 編輯該檔案,找到 ENABLE_USER_SITE 並將其設定為 False $ vim /data/xxx/.anaconda3/envs/env/lib/python3.6/site.py # 再次檢視 sys.path 的路徑,發現 ENABLE_USER_SITE 的值已經變為了 False $ python -m site sys.path = [ '/data/xxx', '/data/xxx/.anaconda3/envs/env/lib/python36.zip', '/data/xxx/.anaconda3/envs/env/lib/python3.6', '/data/xxx/.anaconda3/envs/env/lib/python3.6/lib-dynload', '/data/xxx/.anaconda3/envs/env/lib/python3.6/site-packages', ] USER_BASE: '/data/xxx/.local' (exists) USER_SITE: '/data/xxx/.local/lib/python3.6/site-packages' (exists) ENABLE_USER_SITE: False # 再次檢視 pip list 包列表,已經沒了多餘的包 $ pip list Package Version ---------- ------------------- certifi 2020.12.5 pip 20.3.3 setuptools 51.1.2.post20210112 wheel 0.36.2