Python中anaconda/conda与virtualenv、virtualwrapper、pipenv、pyenv等环境管理器的实际区别是什么?

平时时候后者,最近在自学 AI 基于 python.

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

好吧好吧,我没有强迫症.
但是真的想知道他们的差别在哪里,用起来感觉一样啊,…
Python中anaconda/conda与virtualenv、virtualwrapper、pipenv、pyenv等环境管理器的实际区别是什么?

12 回复

conda 不仅是个环境管理器 还是个包管理器


简单说,conda是包管理器+环境管理器,能管Python包也能管非Python的二进制依赖(比如MKL、CUDA)。其他几个本质都是纯Python环境管理器,依赖pip装包。

核心区别:

  1. conda:解决科学计算场景的依赖地狱,能处理Python包和系统级库。channel机制是双刃剑(方便但可能混用导致冲突)。
  2. virtualenv/pyenv:Unix系传统方案。pyenv管Python版本,virtualenv管环境,pip装包。分工明确,但全是命令行操作。
  3. pipenv:想学npm的package.json+lock机制,把pipvirtualenv打包了。但性能问题和依赖解析速度被吐槽较多。
  4. virtualwrapper:就是给virtualenv加了几个方便的命令(像workonmkvirtualenv)。

怎么选:

  • 做数据科学/机器学习,用conda(尤其Windows或需要非Python依赖时)。
  • 做Web开发或纯Python项目,用virtualenvpyenv-virtualenv组合更轻量可控。
  • 喜欢依赖锁且项目结构简单,可以试试pipenv

一句话建议:科学计算用conda,其他用virtualenv+pyenv组合更省心。

包管理器的概念类似于 pip 吗?
所以还是没区别嘛…

conda 本身不依赖于 python 和 pip,因此可以先装 conda,再在 conda 里装 python,这与其他先装 python,再利用 python 来管理环境有着本质区别。毕竟,从一开始、从根本上就不依赖 python,感觉更彻底,更不容易出差错。

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

另外,如果是用 Windows 系统,由于不用担心搞坏系统自带的 python,可以先不用环境管理器,基本上没有问题,实在遇到版本冲突再用也不迟。

科学计算表示一直不用这些。。。

那你用啥?还是不用?
明白你的意思,解释的非常清楚,conda 和 Python 其他管理器的区别.谢谢你.

  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 版本对应的二进制版本就有 332=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

cool!!!
尤其第三点区别.

忽然想到一个小问题.
如果我用 conda 管理其他包,譬如 django
然后我想阅读 django 源码 可以实现吗?还是说默认实现不了的.,
因为你说 conda 下载的是二进制包?
还是我理解有误?

希望能够得到您进一步解答.

我就不用啊。。。而且上面的第三点其实。。。pip 本身就有 2/3 然后比如 tf 他其实就对应起来 tensorflow/ tensorflow-gpu。。。除非你要装特定版本号的

是否可以详细说说,省略号里面的内容,真心请教,我没明白…

二进制仅对包含 C 扩展的 Python 包有区别,此时 C 写的部分会编译成.so 库文件而看不到源码

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

回到顶部