详解mamba环境管理和安装包细节,深入探讨conda和pip的区别

环境管理

别用conda了,可以用mamba。在google搜索mamba或者miniforge,去github下载release安装。它是conda的平替,但是速度快了好多,输出信息也更丰富。

mamba和pip install

可以只用mamba安装包,也可以用mamba切换环境,用pip安装包。pip的成功率高很多,速度也很快,建议还是用pip算了……

当你使用

他俩的区别这个回答写的很好

作者:月踏
链接:https://www.zhihu.com/question/395145313/answer/2449421755
来源:知乎

  • conda install xxx:这种方式安装的库都会放在mambaforge/pkgs目录下,这样的好处就是,当在某个环境下已经下载好了某个库,再在另一个环境中还需要这个库时,就可以直接从pkgs目录下将该库复制至新环境而不用重复下载。
  • pip install xxx:分两种情况,一种情况就是当前conda环境的python是conda安装的,和系统的不一样,而且不是base env,那么xxx会被安装到mambaforge/envs/current_env/lib/python3.x/site-packages文件夹中(base环境会安在mambaforge/Lib/site-packages),如果当前conda环境用的是系统的python,那么xxx会通常会被安装到~/.local/lib/python3.x/site-packages文件夹中
  • 当然,二者都可以指定安装路径
  • 这里引出一个问题:conda和pip安装同一个xxx库情况下,conda环境下python代码中import xxx时,谁安装的xxx优先级较高会被import,这个问题通过下面这条命令可以解决:

    python -m site

    在我的机器上,会有类似下面输出:

    (py3.6) [~/anaconda3/pkgs @ s64]$ python -m site
    sys.path = [
        '~/anaconda3/pkgs',
        '~/anaconda3/envs/py3.6/lib/python36.zip',
        '~/anaconda3/envs/py3.6/lib/python3.6',
        '~/anaconda3/envs/py3.6/lib/python3.6/lib-dynload',
        '~/anaconda3/envs/py3.6/lib/python3.6/site-packages',
    ]
    USER_BASE: '~/.local' (exists)
    USER_SITE: '~/.local/lib/python3.6/site-packages' (doesn't exist)
    ENABLE_USER_SITE: True

    这里的USER_BASE 和USER_SITE其实就是用户自定义的启用Python脚本和依赖安装包的基础路径,从上面的输出可以看到,import xxx时,先找的是anaconda3/pkgs目录,所以conda安装的包会被import进来。

    作者:HexUp
    链接:https://www.zhihu.com/question/395145313/answer/1230725052
    来源:知乎
     

    pip是用来安装python包的,安装的是python wheel或者源代码的包。从源码安装的时候需要有编译器的支持,pip也不会去支持python语言之外的依赖项。

    conda是用来安装conda package,虽然大部分conda包是python的,但它支持了不少非python语言写的依赖项,比如mkl cuda这种c c++写的包。然后,conda安装的都是编译好的二进制包,不需要你自己编译。所以,pip有时候系统环境没有某个编译器可能会失败,conda不会。这导致了conda装东西的体积一般比较大,尤其是mkl这种,动不动几百兆甚至一G多。

    安装过程问题

    1. opencv从conda安装,vscode代码补全会有bug,用pip就好了

    2. clash代理直接开全局,可以用迅雷加速下载 。规则模式迅雷偶尔识别不到。mamba规则和全局代理都ok,但是pip一定要命令行指明代理“–proxy="http://IP:port",ip在“设置”,port在clash首页

    3. 我在用官网命令,从mamba安装cuda 11.7的torch时碰到了大量问题:

     一开始报错“另一个程序正在使用此文件,进程无法访问”,删除之后 nvidia/noarch的源又访问超时,把所有下载的都删除了手动安装之后又卡在了 “Looking for ['pytorch']” 这步。

    最后卸载重安mambaforge,然后安装失败的cuda包直接参考这篇文章手动安装,中间所有warning的包一律删除,解决了问题

    win10下,conda安装GPU版pytorch最新版本:cuda11.7,遇到的坑 – FSWLY – 博客园

     实际上,conda管这些下载下来用于安装的tar.bz2叫做tarball,当换系统时,把这些难以下载的包复制过去手动用“mamba install –use-local path”也可以 .

    4.  卸载了torch,从tar安装之后,报告OSERROR [winerr 126] cannot load "xxx/shm.dll or one of its dependencies"

            如果这个dll真没有,有可能是路径问题,参考这篇博客

            如果有,那就惨了,依赖缺失。我当时根据网络上对126号错误推荐的办法,用dependence walker 分析了一下shm.dll,发现有几个dll找不到了,其中一个是uv.dll但是别人电脑一样找不到,一样能跑。我就忽略了这个问题。第二天我新建了一个虚拟环境(之前是base),试图用官网命令重安一遍torch,它给出了下列依赖包:

    正好这里有个uv!也就是这个uv是从nvidia源下载的。虽然它是B,不是d,但我死马当做活马医 ,去base里更新了它,然后就能用了。泪目!

     

    物联沃分享整理
    物联沃-IOTWORD物联网 » 详解mamba环境管理和安装包细节,深入探讨conda和pip的区别

    发表评论