Conda 創(chuàng)建 Python 虛擬環(huán)境不純凈的問題(2021.1.18)
[TOC]
1. 產(chǎn)生環(huán)境
- Ubuntu 16.04乖杠;
- Conda 4.9.2澄成;
- Python3.6;
2. 問題描述
通過 Conda 命令創(chuàng)建 Python 虛擬環(huán)境后卫漫,利用 pip list
命令查看包列表列赎,發(fā)現(xiàn)有很多多余的包镐确,并不是一個(gè)干凈的虛擬環(huán)境。問題出現(xiàn)的具體操作如下:
# 創(chuàng)建 Python 虛擬環(huán)境
$ conda create -n env python=3.6
# 激活 Python 虛擬環(huán)境
$ 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. 原因分析
經(jīng)過調(diào)研發(fā)現(xiàn)并不是 Conda 創(chuàng)建的 Python 虛擬環(huán)境不純凈诗越,而是 Pip 列出了用戶安裝的包嚷狞。可以通過如下命令進(jìn)行查看:
# 查看 sys.path床未,確認(rèn) pip 列出包的來(lái)源
$ 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
,查看該路徑后發(fā)現(xiàn) pip list
列出的包確實(shí)是該目錄下的只酥。
4. 解決方法
了解了問題出現(xiàn)的原因,那我們只需要把 ENABLE_USER_SITE
的值設(shè)置為 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 并將其設(shè)置為 False
$ vim /data/xxx/.anaconda3/envs/env/lib/python3.6/site.py
# 再次查看 sys.path 的路徑,發(fā)現(xiàn) ENABLE_USER_SITE 的值已經(jīng)變?yōu)榱?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 包列表窟勃,已經(jīng)沒了多余的包
$ pip list
Package Version
---------- -------------------
certifi 2020.12.5
pip 20.3.3
setuptools 51.1.2.post20210112
wheel 0.36.2