mamba环境管理和安装包的细节(含conda/pip区分)

文章讨论了mamba作为conda的替代品在Python环境管理中的优势,包括更快的速度和更丰富的输出信息。建议使用mamba安装包和pip结合,以提高效率。同时提到了conda和pip安装包的优先级问题,以及opencv、torch等特定包的安装注意事项和错误解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境管理

别用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里更新了它,然后就能用了。泪目!

 

### 如何正确处理 pip Conda 的冲突 在使用 Conda 进行环境管理依赖项安装时,推荐优先使用 `conda` 命令来管理包环境。这是因为 Conda 不仅是一个包管理器,还能够更好地协调不同库之间的兼容性问题[^2]。 #### 使用 Conda 管理环境的最佳实践 为了减少因混合使用 `pip` `conda` 而引发的冲突,建议遵循以下最佳实践: 1. **创建独立的 Conda 环境** 创建一个新的 Conda 环境可以有效隔离项目所需的特定版本依赖项。命令如下: ```bash conda create --name myenv python=3.9 ``` 2. **激活指定环境** 在执行任何操作之前,先激活目标环境以确保所有更改都在该环境中生效。 ```bash conda activate myenv ``` 3. **优先使用 Conda 安装包** 尽量通过 Conda 渠道安装所需软件包,因为这样能更全面地考虑依赖关系。 ```bash conda install numpy pandas matplotlib ``` 4. **必要时谨慎使用 Pip** 如果某些包无法通过 Conda 找到,则可借助 `pip` 来补充安装。但在这样做之前,请确保当前处于正确的 Conda 环境下,并运行以下命令更新元数据索引文件: ```bash conda config --set disallowed_packages [] ``` 接着再用 `pip` 安装缺失的包: ```bash pip install causal-conv1d==1.2.0 mamba-ssm==1.2.0 ``` 5. **修复可能产生的冲突** 当发现存在不一致的情况时,可以通过重新构建 Conda 环境的方式解决问题。这一步骤有助于清理掉由混杂工具引入的混乱状态。 ```bash conda update --all conda clean --all ``` 6. **保持 Jupyter 内核一致性** 若需在同一台机器上切换多个 Python 版本对应的 Notebook 内核,应分别注册各 Conda 环境中的解释器至 Jupyter 中去。 ```bash ipython kernel install --user --name=myenv --display-name "Python (myenv)" ``` 上述方法可以帮助开发者维持良好的开发体验,同时规避由于不当操作造成的系统级错误或者应用崩溃等问题[^1]。 --- ### 示例代码展示 以下是用于自动化设置新 Conda 环境及其配套服务的一组脚本样例: ```bash #!/bin/bash ENV_NAME="test_env" PYTHON_VERSION="3.8" echo "Creating new environment..." conda create -y --name $ENV_NAME python=$PYTHON_VERSION echo "Activating the created environment..." source ~/anaconda3/etc/profile.d/conda.sh && conda activate $ENV_NAME PACKAGES=("numpy" "pandas" "matplotlib") for pkg in "${PACKAGES[@]}"; do echo "Installing package: ${pkg} ..." conda install -y $pkg || { echo "$pkg installation failed! Exiting..."; exit 1; } done # Optional step to add custom packages via pip if necessary. CUSTOM_PACKAGES=("causal-conv1d==1.2.0" "mamba-ssm==1.2.0") if [[ ! -z ${CUSTOM_PACKAGES+x} ]]; then for c_pkg in "${CUSTOM_PACKAGES[@]}"; do echo "Attempting to install with pip: ${c_pkg}" pip install $c_pkg || { echo "$c_pkg installation via pip failed."; continue; } done fi echo "Registering this env as a Jupyter Kernel." ipython kernel install --user --name="$ENV_NAME" --display-name "Python ($ENV_NAME)" echo "Setup complete!" ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值