我在安装SciPy时遇到了麻烦,最近发现了Conda,特别是在我正在开发的Heroku应用程序上。
使用Conda,您可以创建与virtualenv十分相似的环境。我的问题是:
- 如果我使用Conda,它将取代对virtualenv的需求吗?如果没有,如何将两者一起使用?是否在Conda中安装virtualenv或在virtualenv中安装Conda?
- 我还需要使用点子吗?如果是这样,我仍然可以在隔离的环境中使用pip安装软件包吗?
我在安装SciPy时遇到了麻烦,最近发现了Conda,特别是在我正在开发的Heroku应用程序上。
使用Conda,您可以创建与virtualenv十分相似的环境。我的问题是:
Answers:
康达取代了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。
Conda在单个软件包中有效地结合了pip和virtualenv的功能,因此,如果您使用的是conda,则不需要virtualenv。
您会惊讶conda支持多少个软件包。如果还不够,可以在conda下使用pip。
这是到conda页面的链接,用于比较conda,pip和virtualenv:
https://docs.conda.io/projects/conda/zh-CN/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软件包都很简单。
朱皮特
此外,在环境中安装ipykernel
在Jupyter笔记本的“内核”下拉菜单中会添加一个新列表,从而将可复制的环境扩展到笔记本。从Anaconda 4.1开始,添加了nbextensions,更轻松地为笔记本添加了扩展名。
可靠性
以我的经验,conda在安装大型库(例如numpy
和)时更快,更可靠pandas
。此外,如果您希望转移环境的保留状态,则可以通过共享或克隆环境来实现。
安装Conda将使您能够根据需要创建和删除python环境,从而为您提供与virtualenv相同的功能。。
对于这两种发行版,您将能够创建一个隔离的文件系统树,在其中您可以根据需要安装和删除python软件包(可能是pip)。如果您想为不同的用例使用同一个库的不同版本,或者只想尝试进行一些发行并将其删除以节省磁盘空间,则可能会派上用场。
许可协议。虽然virtualenv已获得MIT最宽松的许可证,但Conda使用3条款BSD许可。
康达为您提供了自己的包装控制系统。这个程序包控制系统通常提供流行的非python软件的预编译版本(对于大多数流行的系统),这可以很容易地使某些机器学习程序包正常工作。也就是说,您不必为系统编译优化的C / C ++代码。虽然这对我们大多数人来说是一个很大的缓解,但它可能会影响此类库的性能。
与virtualenv不同,Conda至少在Linux系统上复制了一些系统库。该库可能不同步,从而导致程序行为不一致。
Conda很棒,应该是您开始机器学习之路的默认选择。它将为您节省一些时间,使他们无法使用gcc和许多软件包。但是,Conda并没有取代virtualenv。它引入了一些额外的复杂性,而这些复杂性可能并非总是需要的。它具有不同的许可。您可能要避免在分布式环境或HPC硬件上使用conda。
conda
安装的软件和库而导致的。在HPC中,conda
在许多情况下更可取,实际上,HPC管理员正在使用它来替换module
系统之类的东西。它允许用户安装软件和更好的软件隔离性,这是HPC上的两个大问题。我遇到的唯一警告是,许多HPC文件系统对目录中文件的数量有硬限制,而conda会创建1000个文件。
我同时使用和(截至2020年1月)它们具有一些肤浅的差异,因此适合我的不同用法。通过默认康达更喜欢在一个中央位置来管理你的环境的列表,而使得的virtualenv在当前目录中的文件夹。前者(集中式)在您进行机器学习时才有意义,例如,您有几个广泛的环境可用于许多项目,并且想从任何地方跳入其中。如果您正在做一些一次性项目,这些项目具有完全不同的lib需求集,而lib需求集实际上更多地属于项目本身,则后者(每个项目文件夹)才有意义。
Conda创建的空环境约为122MB,而virtualenv约为12MB,因此,这是您可能不希望将Conda环境分散在各处的另一个原因。
最后,表明Conda偏爱其集中式env的另一个表面现象是(同样,默认情况下),如果您确实在自己的项目文件夹中创建了一个Conda env并激活它,则出现在外壳中的名称前缀是(太长)绝对值文件夹的路径。您可以通过给它命名来解决该问题,但是virtualenv默认情况下做对了。
我希望随着两个程序包管理者争夺霸主地位,此信息会迅速过时,但这是今天的权衡:)
pipenv
?
Pipenv是另一个新的选择,也是我当前首选的启动和运行环境的方法。
目前,它是Python.org官方推荐的Python打包工具
pipenv --two
对于Python2和pipenv-对于python3为3
我在公司工作,在几台没有管理员权限的计算机的防火墙后面
以我有限的python使用经验(两年),我遇到了几个库(JayDeBeApi,sasl),这些库通过pip安装时会抛出C ++依赖项错误错误:需要Microsoft Visual C ++ 14.0。使用“ Microsoft Visual C ++生成工具”获得它:http : //landinghub.visualstudio.com/visual-cpp-build-tools
这些用conda安装得很好,因此从那以后,我开始使用conda env。但是要阻止conda从c.programfiles里面安装依赖项并不容易,因为我没有写权限。