Conda虚拟环境用conda和pip安装软件包的路径问题

Posted stone9528

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Conda虚拟环境用conda和pip安装软件包的路径问题相关的知识,希望对你有一定的参考价值。

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  

最后,上述文章有哪里说明错误,请戳我改正!

conda 迁移环境

参考技术A 更换pc后重建conda环境如果一个一个软件包安装是一个十分麻烦的事情。

conda提供了命令

将当前环境下的所有依赖存储在 env.yaml 中

以上为一个示例,注意当需要更换平台时,如 win 上导出到 MacOS 上创建环境,需要在导出环境时添加 --no-build 。

即可创建新的同名环境。

发现返回信息

经过检查,环境成功创建了,但是只安装了 conda install 命令安装的软件包。
env.yaml 文件中的 pip 之后的依赖包并没有安装。

这时需要在源环境导出pip安装的软件包信息

用 pip 安装没有安装的依赖包

这时,新的报错

产生这个报错的原因有两种
主要是 g++ 和 gcc 的原因。
可以查看
https://www.cnblogs.com/skyme/archive/2011/01/19/1939606.html
首先检查 gcc 和 g++ 版本是否一致。
如果没有安装

安装缺失的,并保持版本一致。
之后在用pip安装就可以了

以上是关于Conda虚拟环境用conda和pip安装软件包的路径问题的主要内容,如果未能解决你的问题,请参考以下文章

python开发简介:Conda,Pip虚环境搭建配置与工程基础实践

condaminicondaanaconda的区别以及在pycharm中选择conda的虚拟环境

Anaconda-用conda创建python虚拟环境

用conda创建python虚拟环境

如何在 Anaconda (Conda) 环境中跟踪 pip 安装的软件包?

简明conda使用指南