环境#
环境是一个目录,其中包含您已安装的特定软件包集合。例如,您可能有一个包含 NumPy 1.7 及其依赖项的环境,以及另一个包含 NumPy 1.6 用于旧版测试的环境。如果您更改一个环境,您的其他环境不会受到影响。您可以轻松激活或停用环境,这是您在它们之间切换的方式。您还可以通过向某人提供您的 environment.yaml
文件的副本与他人共享您的环境。有关更多信息,请参阅管理环境。
Conda 目录结构#
ROOT_DIR
#
conda 发行版安装到的目录。
示例
/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 虚拟环境 |
|
---|---|---|
库 |
静态链接、wheel 中的供应商库,或使用 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 更容易确保频道内的二进制兼容性。