最近我在开发Heroku应用时安装SciPy遇到了麻烦,后来我发现了Conda。
通过使用Conda,您可以创建类似于virtualenv的环境。我的问题如下:
- 如果我使用Conda,是否会替代virtualenv? 如果不是,我该如何同时使用两者?我应该在Conda中安装virtualenv还是在virtualenv中安装Conda?
- 我是否仍然需要使用pip?如果是,我是否仍然能够在隔离环境中使用pip安装软件包?
最近我在开发Heroku应用时安装SciPy遇到了麻烦,后来我发现了Conda。
通过使用Conda,您可以创建类似于virtualenv的环境。我的问题如下:
Conda 取代了 virtualenv。在我看来,它更好。它不仅限于 Python,还可以用于其他语言。根据我的经验,它提供了更流畅的体验,尤其是对于科学软件包。我第一次成功在 Mac 上安装 MayaVi 就是通过使用 conda
。
你仍然可以使用 pip
。事实上,conda
会在每个新环境中安装 pip
。它也知道关于使用 pip 安装的软件包。
conda list
列出当前环境中安装的所有软件包。以conda安装的软件包会显示如下:
sphinx_rtd_theme 0.1.7 py35_0 defaults
通过pip
安装的软件包会带有<pip>
标记:
wxpython-common 3.0.0.0 <pip>
<pip>
表示它是通过pip安装的,否则将使用conda安装。 - Mike Müllerconda-forge
,仅对于不可通过conda获取的软件包使用pip
。 - Mike Müller我同时使用Conda和virtualenv(截止到2020年1月),它们之间有一些表面上的区别,适用于不同的用途。默认情况下,Conda更喜欢在中心位置管理您的环境列表,而virtualenv则在当前目录中创建文件夹。如果您正在做机器学习并且只有几个广泛的环境可供跨多个项目使用,并希望从任何地方进入它们,则前者(集中式)是有意义的。而如果您正在进行完全不同的库要求的小型一次性项目,则后者(每个项目文件夹)是有意义的。
Conda创建的空环境约为122MB,而virtualenv的空环境约为12MB,因此这是另一个您可能不想随处散布Conda环境的原因。
最后,另一个表面上偏向于集中式环境的迹象是,如果在自己的项目文件夹中创建了Conda环境并激活它,则出现在您的shell中的名称前缀是(过长的)文件夹的绝对路径。您可以通过为其命名来解决此问题,但virtualenv默认情况下就能做到正确。
我预计这些信息会很快过时,因为这两个软件包管理器正竞争主导地位,但这就是今天的权衡 :)
编辑:我在04/2021再次审查了情况,结果没有改变。使用conda进行本地目录安装仍然不太方便。
pipenv
吗? - Mikhail_Sam简而言之,您只需要使用conda。
Conda将pip和virtualenv的功能有效地合并到一个软件包中,因此如果您使用conda,则不需要virtualenv。
您会惊讶于conda支持多少个软件包。如果还不够,您可以在conda下使用pip。
这是一个链接,链接到conda页面,介绍了conda、pip和virtualenv之间的区别:
https://docs.conda.io/projects/conda/en/latest/commands.html#conda-vs-pip-vs-virtualenv-commands.
虚拟环境和 pip
我要补充一点,使用Anaconda创建和删除conda
环境非常简单。
> conda create --name <envname> python=<version> <optional dependencies>
> conda remove --name <envname> --all
conda
或pip
安装软件包:(envname)> conda install <package>
(envname)> pip install <package>
这些环境与conda的类似pip的软件包管理紧密相关,因此创建环境并安装Python和非Python软件包非常简单。
Jupyter
此外,在环境中安装ipykernel
会在Jupyter笔记本的内核下拉菜单中添加一个新的列表,将可重复使用的环境扩展到笔记本中。从Anaconda 4.1开始,nbextensions被添加, 更容易地为笔记本添加扩展。
可靠性
根据我的经验,conda
在安装大型库(如numpy
和pandas
)方面更快且更可靠。此外,如果您希望传输环境的保留状态,则可以通过共享或克隆环境来实现。
比较
一个非详尽的、快速浏览每个工具特性的列表:
功能 | virtualenv |
conda |
---|---|---|
全局 | n | y |
本地 | y | n |
PyPI | y | y |
渠道 | n | y |
锁定文件 | n | n |
多Python版本 | n | y |
描述
virtualenv
创建项目特定的本地环境,通常在每个项目中使用一个 .venv/
文件夹。相比之下,conda
的环境是全局的,并保存在一个地方。pip
与两种工具配合使用,但 conda
可以添加其他渠道,有时可以更快地安装。virtualenv
需要 Python,但 conda
已经附带了 Python。 virtualenv
使用安装时的相同 Python 版本创建环境。 conda
允许您使用几乎任何 Python 版本创建环境。另请参阅
venv
:标准库中的模块virtualenvwrapper
:全局virtualenv
pyenv
:管理Python版本mamba
:"更快"的conda
conda
非常适合数据科学应用,并作为一个很好的通用环境工具。然而在软件开发中,通过使用 virtualenv
来创建本地的、短暂的、轻量级环境可能会更加方便。Conda很棒,应该是您开始机器学习的默认选择。它将节省您处理gcc和众多软件包的时间。然而,Conda不能替代virtualenv。它引入了一些额外的复杂性,这可能并不总是需要的。它有不同的许可证。您可能希望避免在分布式环境或HPC硬件上使用conda。
conda
安装的软件和库所导致的。在 HPC 中,conda
在许多情况下是首选,事实上,它正在被 HPC 管理员用来替换诸如“模块”系统之类的东西。它允许用户安装的软件和更大的软件隔离,这是 HPC 上的两个重要问题。我唯一遇到的限制是许多 HPC 文件系统对目录中文件数量有硬限制,而 conda 则创建了许多数千个文件。 - user5359531conda
可以处理流行的非 Python 软件包的 C/C++ 编译,这些软件包不带有自己的 Python 包装或二进制文件。据我所知,virtualenv
不具备这种能力。但是,你对于“避免在分布式环境或 HPC 硬件上使用 conda”这一结论是错误的,并且缺乏事实支持。我同意 @user5359531 的结论,即你需要学习更多关于如何配置和使用conda
来处理复杂的 HPC 系统。它可以比单独使用 virtualenv 解决更多的 HPC 问题。 - Rich Lysakowski PhD另一个新选项,也是我目前首选的环境安装方法是Pipenv
它目前是Python.org官方推荐的Python打包工具。
是的,conda
的安装比 virtualenv
更加容易,而且基本上可以替代后者。
我在公司工作,身处多重防火墙之后,使用的机器没有管理员权限。
在我有限的 Python 经验(2 年)中,我遇到了一些库(JayDeBeApi、sasl),当通过 pip 安装时,会抛出 C++ 依赖项错误 error: 需要 Microsoft Visual C++ 14.0。请使用“Microsoft Visual C++ Build Tools”获取:http://landinghub.visualstudio.com/visual-cpp-build-tools
这些库可以通过 conda 正常安装,因此自那时起,我开始使用 conda 环境进行工作。 然而,停止 conda 在我没有写入权限的 c.programfiles 中安装依赖项并不容易。