Conda 创建 Python 虚拟环境不纯净的问题(2021.1.18)

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
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值