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

2021-05-26 16:08:53 +08:00
 rationa1cuzz
网上找了一圈都是如何安装和下载包
重新部署的话大致流程是先安装 anaconda/miniconda 然后用从本地导出的 yaml 文件重新拉,其本质是不是也是重新下载包 是不是跟我 pip install -r res.txt 是一致的
而离线安装的话我 pip 也可以先把包下载到本地,然后通过--no-index --find-links=./offine_package 等方式实现离线安装,conda 的话好像是拷贝一下文件即可
不知道 conda 有什么优势?
4645 次点击
所在节点    Python
24 条回复
Raven316
2021-05-26 16:10:36 +08:00
可以有很多个独立的环境?切换方便?我也不太懂
rationa1cuzz
2021-05-26 16:10:39 +08:00
不会有非科学运算的人用 Anaconda 吧,默认带的包也太多太大了?
Raven316
2021-05-26 16:10:54 +08:00
我 conda 安装包老是装不上,实际都用 pip 装的
est
2021-05-26 16:13:32 +08:00
@rationa1cuzz 可以换 miniconda 。

conda 是可以切 python.exe 以及非 py 的依赖,pip 只能切 py 的依赖
rationa1cuzz
2021-05-26 16:13:46 +08:00
@Raven316 我网上看 conda 的包比较少,自己还没使用过
rationa1cuzz
2021-05-26 16:16:02 +08:00
@est 那优势在于切不同版本 python 的环境,这样来说对于 virtualenv 而言确实很不错,如果我只有一个 python 版本岂不是没有任何优势[手动狗头]
jimages
2021-05-26 16:22:16 +08:00
miniconda 的优势在于他不仅管理了 python 的依赖,还管理了二进制依赖,例如你要装一个包,这个包依赖了 cuda9.0,而你的另外一个包依赖于 cuda10.0,那么你就需要在本机上安装 cuda9.0,cuda10.0,对于一个小白用户来说,这种依赖不同二进制库何解?第场景,numpy 如果想用 mkl 的话,目前 pip 无解,只能下 openblas 的,除非手动编译,如果要手动编译,那就得安装 mkl,改配置文件,然后手动编译,而在 anaconda 上只需要 conda install,会自动安装 mkl,下载编译好的带 mkl 的 numpy 。同理依赖不同版本的 cudnn 也是一样的。
est
2021-05-26 16:38:52 +08:00
@rationa1cuzz conda 有一些二进制包更方便。适合手残自行编译困难的。。。
IgniteWhite
2021-05-26 17:04:55 +08:00
楼上提的差不多了。我说一些小细节:

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

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

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

conda 在 solve environment 的时候,有时会特别慢。可以了解一下 mamba,一个对 conda 基于 C++的重新实现。
justaman
2021-05-26 17:11:21 +08:00
我也来吐槽下
conda 还是给数据科学用比较合适,深度学习啥的
一般情况,感觉 pip 更好用,简单且够用了
最让我感觉难受的是,库经常下不动,要配置源很麻烦,还有 https 的问题
之前遇到两种情况用 conda,1.pip 装不了只能用 conda 装,2.conda 可以指定 python 版本
yuruizhe
2021-05-26 17:33:42 +08:00
依稀记得,conda 的目标好像不止于此,好像甚至可以管 apt 的包,java 的包等等,要做一个超级包管理器。。。好像是,记不太清了
nightwitch
2021-05-26 18:05:44 +08:00
conda 不仅是一个 python 的包管理器,包括很多常用的包,比如高版本的 gcc 。
这在没有 root 权限的机器上非常方便
karloku
2021-05-26 18:41:51 +08:00
pyenv+1
windows 上以前还会用 conda, 现在都在 WSL 里装 linux 版了.

之前在 linux 里用 miniconda 主要 intel 自家优化过的 python 分发只在 intel 的 conda channel 上分发. 但是那个分发版本更新太慢了, 慢慢就不用了...
codepark
2021-05-26 19:00:31 +08:00
pyenv
CEBBCAT
2021-05-26 19:02:57 +08:00
“不懂就问”不是你就在这硬发水贴的理由
locoz
2021-05-26 19:14:57 +08:00
Conda 能管的更多一些,如果只管理 Python 包的话,Poetry 目前个人感觉最爽。
imn1
2021-05-26 19:25:18 +08:00
windows 至今没解决一些包怎么装,例如 sparse_dot_topn,搜了一下是国际问题
所以转到 miniconda 下
pip 显示是 cl.exe 找不到,但根本和 cl.exe 无关,用源码编译就能看到实际上是很多编译相关的 dll 找不到,copy 这个 dll 到源码目录就会报另一个 dll 找不到……那些 dll 的路径在环境变量 path 里面都有的,搜了一遍无解

conda 预装太多的包,我这里很容易卡死,安装包时分析环境(依赖)转圈圈可以长达几十分钟到几小时,也是国际问题,miniconda 装相同的包才几分钟

另外,conda 不要一开始就装 opencv,总是报 cv2.cv2 找不到 module,要放到最后装,或者最后重装一遍(更新了某些包出现这个问题的话,也是要重装一遍 opencv )
shayuvpn0001
2021-05-26 19:30:30 +08:00
conda 建立环境,pip 安装包,conda 打包移植。(尽量不要用 conda 源的包,数量比 pip 少,国内镜像比 pip 少,更新也比 pip 慢一点。)

conda 是真好用。。。目前总结下来的最佳实践。
sinux
2021-05-26 20:02:07 +08:00
你把 conda 理解成 brew,然后把 pip 理解成 pip /npm 就行了。
philipjf
2021-05-26 20:22:55 +08:00
最近正好刚接触,说一下使用心得;应用场景就是 tensorflow 跑一些简单模型,个人电脑用的是 Mac,一开始图省事就直接用官方的 docker 镜像在容器里跑。
后来因为发热实在扛不住,跟学校 it 申请了个虚拟机打算装 ubuntu,谁知道给的直接是个 windows server,访问权限还只给了远程桌面,连 SSH 都禁用了,还不给管理员权限。
一开始打算还是装个 docker 用,结果不知道什么原因 docker desktop 装不上,然后找到巨硬官方的 docker 容器插件,装上发现由于版本过旧( 1809 ),不支持 wsl2,所以只能运行 Windows 容器,遂作罢。
然后打算用 tensor flow 官方安装说明的 env 虚拟环境,但是虚拟环境的安装路径还得手工管理。
最后别人给我推荐了 anaconda,安装无需管理员权限,也能自动管理虚拟环境的安装路径,还能通过导出配置文件在不同机器上快速部署相同的环境,虽然没用上其他强大功能,但也算帮助我完成了任务。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/779349

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX