环境#
环境是一个目录,其中包含您已安装的特定软件包集合。例如,您可能有一个包含 NumPy 1.7 及其依赖项的环境,另一个包含 NumPy 1.6 用于遗留测试的环境。如果您更改了一个环境,您的其他环境不会受到影响。您可以轻松地激活或停用环境,这就是您在环境之间切换的方式。您还可以通过向某人提供您的 environment.yaml
文件的副本,与某人共享您的环境。有关更多信息,请参阅 管理环境。
Conda 目录结构#
ROOT_DIR
#
Anaconda 或 Miniconda 安装到的目录。
示例
/opt/Anaconda #Linux
C:\Anaconda #Windows
/pkgs
#
也称为 PKGS_DIR。此目录包含已解压缩的软件包,已准备好链接到 conda 环境中。每个软件包都位于与其规范名称相对应的子目录中。
/envs
#
用于创建其他 conda 环境的系统位置。
以下子目录构成了默认的 Anaconda 环境
/bin
/include
/lib
/share
其他 conda 环境通常包含与默认环境相同的子目录。
虚拟环境#
虚拟环境是一个工具,它通过为每个项目创建隔离空间来帮助保持不同项目所需的依赖项分离,这些空间包含每个项目的依赖项。
用户可以使用几种工具之一创建虚拟环境,例如 Pipenv 或 Poetry,或者 conda 虚拟环境。Pipenv 和 Poetry 基于 Python 的内置 venv 库,而 conda 有自己的虚拟环境概念,该概念更底层(Python 本身是 conda 环境中提供的依赖项)。
请向右滚动查看下表。
其他一些特性是
Python 虚拟环境 |
Conda 虚拟环境 |
|
---|---|---|
库 |
静态链接、在 wheels 中供应商库,或使用 apt/yum/brew/etc。 |
将系统级库安装为 conda 依赖项。 |
系统 |
依赖于系统的 Python 基本安装。 |
Python 与系统无关。 |
扩展环境 |
使用 pip 扩展环境。 |
使用 conda 或 pip 扩展环境。 |
非 Python 依赖项 |
管理非 Python 依赖项(R、Perl、任意可执行文件)。 |
|
跟踪依赖项 |
显式跟踪二进制依赖项。 |
为什么要使用基于 venv 的虚拟环境#
您更喜欢他们的工作流程或规范格式。
您更喜欢使用系统 Python 和库。
您的项目维护者只发布到 PyPI,而您更喜欢直接来自项目维护者的软件包,而不是其他人提供的基于相同代码的构建。
为什么要使用 conda 虚拟环境?#
您希望控制二进制兼容性选择。
您希望使用更新的语言标准,例如 C++ 17。
您需要系统 Python 不提供的库。
您希望在同一个空间中管理来自 Python 以外语言的软件包。
工作流程差异#
在确定您的首选工作流程和虚拟环境时,需要考虑一些问题
您的环境是否在多个代码项目中共享?
您的环境是否与您的代码一起存在,还是在单独的位置?
您的安装步骤是否涉及安装任何外部库?
您是否希望将您的环境作为某种包含环境实际文件的存档进行传送?
软件包系统差异#
选择 PyPI 或 conda 可能有潜在的好处。
PyPI 只有一个全局命名空间,并且对该命名空间的拥有权是分散的。因此,在 PyPI 中,更容易直接从软件包维护者获得单个软件包的来源。
Conda 有无限的命名空间(通道)以及对给定通道的分散拥有权。因此,使用 conda 更容易确保通道内的二进制兼容性。