不懂就问, conda 是个啥?和 pip 有啥优势?如何解决跨平台和离线问题

发布于 2021-05-27 21:32:30

网上找了一圈都是如何安装和下载包
重新部署的话大致流程是先安装 anaconda/miniconda 然后用从本地导出的 yaml 文件重新拉,其本质是不是也是重新下载包 是不是跟我 pip install -r res.txt 是一致的
而离线安装的话我 pip 也可以先把包下载到本地,然后通过--no-index --find-links=./offine_package 等方式实现离线安装,conda 的话好像是拷贝一下文件即可
不知道 conda 有什么优势?

查看更多

关注者
0
被浏览
526
3 个回答
jimages
jimages 2021-05-27
这家伙很懒,什么也没写!

miniconda 的优势在于他不仅管理了 python 的依赖,还管理了二进制依赖,例如你要装一个包,这个包依赖了 cuda9.0,而你的另外一个包依赖于 cuda10.0,那么你就需要在本机上安装 cuda9.0,cuda10.0,对于一个小白用户来说,这种依赖不同二进制库何解?第场景,numpy 如果想用 mkl 的话,目前 pip 无解,只能下 openblas 的,除非手动编译,如果要手动编译,那就得安装 mkl,改配置文件,然后手动编译,而在 anaconda 上只需要 conda install,会自动安装 mkl,下载编译好的带 mkl 的 numpy 。同理依赖不同版本的 cudnn 也是一样的。

IgniteWhite
IgniteWhite 2021-05-27
这家伙很懒,什么也没写!

楼上提的差不多了。我说一些小细节:

conda 能记录环境的改动,如果不小心安装或者卸载了包和依赖,能查看 revision 历史然后回到某个版本。

另外,有些时候 conda-forge 收录包不如 PyPI 及时,如果想在同一个 conda 环境里安装这些包,只能在 conda 里面安装 pip,再用 pip 安装, @Raven316 提到了。

我个人还是优先使用 pyenv,它能装更多种不同的 Python 版本,包括 Anaconda/Miniconda 。如果使用了带 conda 的,pyenv 会在管理环境的时候会优先调用 conda 进行管理。

conda 在 solve environment 的时候,有时会特别慢。可以了解一下 mamba,一个对 conda 基于 C++的重新实现。

rationa1cuzz
rationa1cuzz 2021-05-27
这家伙很懒,什么也没写!

总结一下:
1 、conda 可以管理不同版本 python 的依赖 例如:python27/python35/python36
2 、可以管理二进制依赖 例如:依赖 cuda9.0 cuda10.0
3 、某些无法使用 pip 或者比较麻烦的包的安装 例如:mkl 二进制包
4 、可以记录环境改动 例如:不小心安装或卸载了包 可以回退

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览