Conda 創建 Python 虛擬環境不純凈的問題(2021.1.18)
目錄- Conda 創建 Python 虛擬環境不純凈的問題(2021.1.18)
- 1. 產生環境
- 2. 問題描述
- 3. 原因分析
- 4. 解決方法
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/481667.html
標籤:Python
