Conda虚拟环境用conda和pip安装软件包的路径问题
2023-04-18 15:41:38 时间
1. pip安装路径。参考博客ubunt18.04中pip安装的包和虚拟环境中pip安装的包各自在哪里
一:正式环境中
1. pip pip3 安装的包在下面路径(pip指向了python3.6解释器)
~/.local/lib/python3.6/site-packages/
2. pip2 安装的包在下面路径下
~/.local/lib/python2.7/site-packages/
3. pip3.5 安装的包在下面路径下
~/.local/lib/python3.5/site-packages/
二:虚拟环境中
pip 安装的包在下面路径下
~/.virtualenvs/虚拟环境名目录/lib/python3.5(或python2.7或python3.6)/site-packages
2. conda安装路径。参考博客conda 和 pip的区别&创建虚拟环境和下载第三方库的方法
conda安装软件包的路径是~/Anaconda3/pkgs
#anaconda默认安装在~/#
所以,在某个环境中下载了包,再到另一个环境中下载同样的包时,
conda会自动在上面的目录里找,如果有,不会重复下载,
而是将这个包的site_package下的文件复制到当前环境下。
和直接pip install 一样了。
# ~/.conda/envs/EnvName/python3.6/site-packages
使用conda uninstall时,和pip uninstall 一样,
删除了当前环境site_packages中的包的内容,
但是在上述目录里面还存在这个包。
3. 实测安装并非如此。
但在conda虚拟环境中实测pip install将软件包安装在了上述全局路径中,
~/.local/lib/python3.6/site-packages/
用conda list查不到。
4. 上干货--解决conda环境pip安装至全局路径问题。
参考博客:conda环境下pip install 无法安装到指定conda环境中(conda环境的默认pip安装位置)
conda环境下pip install 无法安装到指定conda环境中(conda环境的默认pip安装位置)
我的观点:pip默认把软件包安装到全局site-packages中。
好多文章说在虚拟环境中用pip安装软件包会安装到这个虚拟环境,
但我实测是安装到了全局python的site-packages。
有的文章通过修改~/.profile(开机启动一次)或者~/.bashrc(打开一个shell启动一次),
确实可以将当前虚拟环境路径设置为优先检索路径。
通过echo $PATH可以查看当前环境检索路径。
但此作用只用于你which pip或者which python再或pip --version时
显示在当前虚拟环境,并不能修改pip安装位置
真正的pip安装位置是由当前环境的lib文件夹中的pythonx.x文件夹下的site.py决定的。
其中的site.py中的
USER_SITE = None
USER_BASE = None
USER_SITE 表示安装路径
USER_BASE 表示执行下载的pip等脚本的路径
所有的python包都一样,当你不修改时,默认修改为系统的全局路径。
(没有看懂代码,猜测是读取的系统环境路径,而非用户级别的.bashrc或.profile能修改的)
可能是为了节约空间才这样设置的吧,这样可以集中管理所有环境的软件包。
#通过此命令可以查看当前环境搜索路径
python -m site
(base) ubuntu@ubuntu:~$ conda activate raft
(raft) ubuntu@ubuntu:~$ python -m site
sys.path = [
'/home/ubuntu',
'/opt/ros/melodic/lib/python2.7/dist-packages',
'/home/ubuntu/anaconda3/envs/raft/lib/python36.zip',
'/home/ubuntu/anaconda3/envs/raft/lib/python3.6',
'/home/ubuntu/anaconda3/envs/raft/lib/python3.6/lib-dynload',
'/home/ubuntu/.local/lib/python3.6/site-packages',
'/home/ubuntu/anaconda3/envs/raft/lib/python3.6/site-packages',
]
USER_BASE: '/home/ubuntu/.local' (exists)
USER_SITE: '/home/ubuntu/.local/lib/python3.6/site-packages' (exists)
ENABLE_USER_SITE: True
修改后再次执行:
python -m site
(raft) ubuntu@ubuntu:~$ python -m site
sys.path = [
'/home/ubuntu',
'/opt/ros/melodic/lib/python2.7/dist-packages',
'/home/ubuntu/anaconda3/envs/raft/lib/python36.zip',
'/home/ubuntu/anaconda3/envs/raft/lib/python3.6',
'/home/ubuntu/anaconda3/envs/raft/lib/python3.6/lib-dynload',
'/home/ubuntu/anaconda3/envs/raft/lib/python3.6/site-packages',
]
USER_BASE: '/home/ubuntu/anaconda3/envs/raft/lib/python3.6' (exists)
USER_SITE: '/home/ubuntu/anaconda3/envs/raft/lib/python3.6/site-packages' (exists)
ENABLE_USER_SITE: True
证明路径修改成功,此后在虚拟环境中用pip下载软件包将仅下载在当前虚拟环境。
不会影响全局环境的依赖关系。
下载一个软件包试试:
(raft) ubuntu@ubuntu:~$ pip install numpy
Collecting numpy
Downloading numpy-1.19.5-cp36-cp36m-manylinux2010_x86_64.whl (14.8 MB)
|████████████████████████████████| 14.8 MB 12.3 MB/s
Installing collected packages: numpy
Successfully installed numpy-1.19.5
conda list也可以查到:
(raft) ubuntu@ubuntu:~$ conda list
# packages in environment at /home/ubuntu/anaconda3/envs/raft:
#
# Name Version Build Channel
_libgcc_mutex 0.1 main
_openmp_mutex 5.1 1_gnu
ca-certificates 2022.07.19 h06a4308_0
certifi 2021.5.30 py36h06a4308_0
ld_impl_linux-64 2.38 h1181459_1
libffi 3.3 he6710b0_2
libgcc-ng 11.2.0 h1234567_1
libgomp 11.2.0 h1234567_1
libstdcxx-ng 11.2.0 h1234567_1
ncurses 6.3 h5eee18b_3
numpy 1.19.5 pypi_0 pypi
openssl 1.1.1q h7f8727e_0
pip 21.2.2 py36h06a4308_0
python 3.6.13 h12debd9_1
readline 8.1.2 h7f8727e_1
setuptools 58.0.4 py36h06a4308_0
sqlite 3.39.3 h5082296_0
tk 8.6.12 h1ccaba5_0
wheel 0.37.1 pyhd3eb1b0_0
xz 5.2.6 h5eee18b_0
zlib 1.2.12 h5eee18b_3
最后,上述文章有哪里说明错误,请戳我改正!
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击