anaconda/conda 和 其他的环境管理器 譬如 virtualenv virtualwrapper pipenv pyenv 等实际区别是什么?

2018-07-23 10:56:20 +08:00
 chaleaochexist
平时时候后者,最近在自学 AI 基于 python.

发现科学计算相关的都是用 anaconda/conda.

好吧好吧,我没有强迫症.
但是真的想知道他们的差别在哪里,用起来感觉一样啊,..
3116 次点击
所在节点    Python
11 条回复
jmc891205
2018-07-23 11:20:15 +08:00
conda 不仅是个环境管理器 还是个包管理器
chaleaochexist
2018-07-23 11:30:52 +08:00
@jmc891205 包管理器的概念类似于 pip 吗?
所以还是没区别嘛...
SuperMild
2018-07-23 11:31:13 +08:00
conda 本身不依赖于 python 和 pip,因此可以先装 conda,再在 conda 里装 python,这与其他先装 python,再利用 python 来管理环境有着本质区别。毕竟,从一开始、从根本上就不依赖 python,感觉更彻底,更不容易出差错。

不过其实都差不多,这些东西各有各的好用,都没有大问题,随便找一个用,用得爽就继续用,用不爽就换一个。

另外,如果是用 Windows 系统,由于不用担心搞坏系统自带的 python,可以先不用环境管理器,基本上没有问题,实在遇到版本冲突再用也不迟。
ChopinWong
2018-07-23 12:52:10 +08:00
科学计算表示一直不用这些。。。
chaleaochexist
2018-07-23 14:08:39 +08:00
@ChopinWong 那你用啥?还是不用?
@SuperMild 明白你的意思,解释的非常清楚,conda 和 Python 其他管理器的区别.谢谢你.
glasslion
2018-07-23 18:38:43 +08:00
1. conda 不仅仅是 “ Python 包管理器”,它想成为 数据科学领域各种软件的包管理。Python 本身就是一个包,可以用 conda 安装不同版本的 Python , 而 virtualenv virtualwrapper pipenv 不可以
2. conda 流行主要是靠安装二进制包方便 。Pypi 全靠社区维护,如果包的提交者不提供 window,mac 的二进制安装包, 使用者就要自己编译, 安装就很费劲
3. python packaging 本身就不是为二进制分发设计的.
以 torch 为例:
Os(Linux/Windows/Mac), Python 版本(2.7/3.5/3.6), CUDA 版本(8/9)
那么一个 torch 版本对应的二进制版本就有 3*3*2=18 个
pip 并没有一个机制去自动判断该安装哪个二进制包, 所以 pip 安装 pytorch tensorflow 是要靠人手动选择对应的包的
pip3 install http://download.pytorch.org/whl/cu90/torch-0.4.0-cp35-cp35m-win_amd64.whl

conda 把相关信息打包在了包的 metadata 里,就能自动判断了:
conda install pytorch cuda90 -c pytorch
chaleaochexist
2018-07-24 11:25:02 +08:00
@glasslion cool!!!
尤其第三点区别.
chaleaochexist
2018-07-24 11:26:12 +08:00
@glasslion 忽然想到一个小问题.
如果我用 conda 管理其他包,譬如 django
然后我想阅读 django 源码 可以实现吗?还是说默认实现不了的.,
因为你说 conda 下载的是二进制包?
还是我理解有误?

希望能够得到您进一步解答.
ChopinWong
2018-07-24 13:38:16 +08:00
@chaleaochexist 我就不用啊。。。而且上面的第三点其实。。。pip 本身就有 2/3 然后比如 tf 他其实就对应起来 tensorflow/ tensorflow-gpu。。。除非你要装特定版本号的
chaleaochexist
2018-07-24 16:18:54 +08:00
@ChopinWong 是否可以详细说说,省略号里面的内容,真心请教,我没明白...
frostming
2018-07-24 21:27:51 +08:00
@chaleaochexist 二进制仅对包含 C 扩展的 Python 包有区别,此时 C 写的部分会编译成.so 库文件而看不到源码

像 Django 这种纯 Python 的包,是可以看源码的,因为 Python 是个解释型的语言。

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

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

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

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

© 2021 V2EX