The definitive guide to Python virtual environments with conda(半机翻)

发布于 2022-06-15  286 次阅读


使用conda的Python虚拟环境的权威指南

有两种类型的数据科学家,一种人花时间掌握conda;另一种没有掌握conda(并因此而在角落里哭泣)。

这是WhiteBox工具包系列的第一篇文章,在这里我们将高度详细地告诉你我们在日常工作中使用的工具。

这篇文章是关于conda的,我们用它来安装和管理我们系统中的Python及其库。我们在开发和生产中都使用它,而且我们坚信conda比其他替代工具如virtualenv、poetry、pyenv或pipenv更突出。

我们不使用conda是因为习惯问题。我们也尝试过其他的替代品,但总是回到conda,因为它是市场上唯一的,可以说是功能齐全的解决方案。

根据我6年多来做数据科学的经验,conda(和一般的虚拟环境)是一个经常不被人理解的工具。你会惊讶于有多少优秀的专业人士,即使有5年以上的经验,仍然在与混乱、腐败和几乎无法使用的Python安装作斗争。

这篇文章的目的是要彻底结束这种疯狂的状态。如果你对虚拟环境有了更好的理解,我们的目标就达到了。

Probably, your Python environment (image by xkcd: http://xkcd.com/1987)

1.虚拟环境

首先,让我们通过一些例子深入了解什么是虚拟环境,什么不是

1.1 使用案例

想象一下,你准备开始一个新的数据科学项目。你打算

  • 从一个.csv文件加载一些数据。
  • 进行一些转换(清理、聚合等)。
  • 训练一个机器学习模型。

要做到这一点,你要使用Python(或R),以及一些库。就Python而言,你需要。

  • Python本身
  • pandas
  • scikit-learn

在大多数类似UNIX的操作系统(Linux发行版和macOS)中,Python已经与操作系统一起开箱即用了。只要打开一个终端,然后写:which python3

`which python3` command

正如你所看到的,这个命令的输出显示,Python 已经安装在我们的系统中/usr/bin/python3 的位置。Python 在我们的系统中只是一个可执行的二进制文件。

这个Python安装称为System Python,这意味着我们的操作系统使用此可执行文件来完成许多操作。例如,如果您打开文件资源管理器,它可能会使用系统python列出文件和文件夹。这就是我们要保证这个Python二进制文件版本统一与确保其完美工作的原因。

如果在安装库(如 pandas 或 scikit-learn)的过程中,System Python 发生了损坏(相信我,狗屎会发生),那么遇到麻烦(复杂的修复/新的操作系统安装)的概率很高,这就是虚拟环境存在且如此受欢迎的原因之一。

现在想象一下,你想用Python 3.8版本安装最新版本的Apache Airflow(一个用于协调工作流的Python库),但你的系统运行的是Python 3.7。在这种情况下,虚拟环境也是你最好的朋友。

虚拟环境的典型用途是。

  • 你可以毫无顾忌地进行实验。安装和卸载库,如果有什么东西坏了,你可以直接删除环境,然后重新创建它,没有任何风险。
  • 你可以根据你的需要创建尽可能多的虚拟环境。例如,为每个项目创建一个虚拟环境,或者为每个你想与系统其他部分隔离运行的应用程序创建一个虚拟环境(Jupyter、Apache Airflow等)。
  • 一些库可能有冲突的要求(例如,一个库需要Python 3.6,而另一个未维护的遗留库仍然需要Python 2.7),可以安装在不同的虚拟环境中。

1.2 定义

一个虚拟环境只是一个隔离的 Python 及其库的安装。在这篇文章的下一节,我将解释虚拟环境并不局限于 Python,而是任何任意的软件。

virtual environments

例如,在上面的图中,我们有

  • 一个系统Python(3.7版本)。
  • 一个带有4个虚拟环境的conda安装,2个Python,1个R,1个Java。

我们会更深入地了解这个图的含义,但现在,你应该对什么是虚拟环境有基本的了解。

在使用 conda 来创建和管理我们的虚拟环境的情况下,这些虚拟环境是完全独立的,这意味着它们与系统 Python 或彼此之间没有关系。其他的虚拟环境管理器并不尊重这种独立性,它们与 System Python 建立链接,限制了你对 Python 版本的选择。

2.神话故事

如果你正在阅读这篇文章,并且你可能已经有了一些关于虚拟环境的知识(或者至少,你认为你已经有了),那么让我们开始与一些关于虚拟环境和conda的骗局作斗争,你可能已经熟悉了。

2.1 conda和Anaconda(或Miniconda)是同一回事:错误🙅

conda是一个虚拟环境管理器,一个允许你创建、删除或打包虚拟环境以及安装软件的软件,而Anaconda(和Miniconda)包括conda以及一些预先下载的库。在Miniconda的情况下,只包含一些满足需求所必要的库,而在Anaconda的情况下,包含超过500Mb的库。请看下面的图表。

conda, miniconda and anaconda

在这一点上,没有经验的用户会想:"好吧,让我们安装Anaconda(而不是Miniconda),否则我将失去对一些库的访问"。嗯......这是错误的想法。请到下一节了解更多信息。

2.2 你必须安装Anaconda而不是Miniconda才能访问更多的库:错误🙅

Anaconda和Miniconda的唯一区别是,Anaconda已经预先下载了很多库,所以当你做conda install pandas ,它已经从网上下载并准备好安装。

与Miniconda相比,这并不是一个巨大的优势。

  • 现在,大多数工作站和服务器都可以使用快速的互联网连接。当你试图安装一个新的库时,conda首先检查它是否已经在你的系统中下载/缓存,如果没有,就从互联网上下载。
  • 此外,库的版本会不断地更新,所以Anaconda的500Mb的缓存库可能在几个小时后就会过时。
  • 在Anaconda预装的所有库中,你可能只需要一小部分来开始你的项目工作。

要明确的是:Anaconda和Miniconda的可用库目录是一样的,安装Anaconda比Miniconda没有任何优势(除非你想失去500Mb的硬盘存储空间)。只要安装Miniconda并让conda(记住,是虚拟环境管理器)根据需要从网上下载并安装最新版本的软件包。

2.3 你可以使用conda或pip,但不能同时使用:错误🙅

有一种延伸的观点认为conda和pip是替代品或竞争对手,这是错误的。conda和pip的目标不一样,它们在一起工作得相当好!

请记住在这篇文章的开头,conda是一个虚拟环境管理器,一个能做两件事的软件。

  1. 管理虚拟环境:它创建、删除或打包虚拟环境。
  2. 从conda资源库中安装库(也叫通道):它允许在虚拟环境中安装软件。这些软件包括整个编程语言如Python、R或Java,库如pandas或scikit-learn,甚至软件如htop、tmux或一个成熟的PostgreSQL数据库。

conda和pip的唯一竞争点是第2点的一个子集:安装Python库。当你创建一个新的虚拟环境时,你可以使用conda或pip安装Python库。大多数时候,用conda或pip安装它们并没有什么区别。pip目录更加完整,而conda的依赖关系解析器则更加强大。在一个 conda 虚拟环境中,你可以同时使用 conda 和pip 来安装库。

2.4 conda 只适用于 Python 虚拟环境:错误🙅

这是conda虚拟环境的一个鲜为人知的特点,使它在竞争中脱颖而出。

大多数人认为conda是针对Python的,但实际上conda虚拟环境是一个通用环境,你几乎可以安装任何东西。需要R和RStudio吗?你能在conda安装他。需要Java吗?你也能在conda安装他。你甚至可以安装一些传统上使用aptbrew 安装的库,比如 htop 或 tmux。

2.5 venv就像conda一样,但是很轻便:错误🙅

venv 和 conda 主要有两点不同。

  • conda不仅仅是一个Python虚拟环境管理器。它是一个通用的虚拟环境,支持的内容远不止Python。安装在conda环境中的Python是一个真正的Python可执行文件,而不是与你的系统Python的链接(就像其他替代方案那样),所以它的版本可以是你想要的任何版本,不受系统Python的限制。
  • venv仅限于使用pip安装软件包,而使用conda,你可以同时使用pip和conda软件包安装程序。

 

原文地址(https://en.whiteboxml.com/blog/the-definitive-guide-to-python-virtual-environments-with-conda)


面向ACG编程