管理环境#
使用 conda,您可以创建、导出、列出、删除和更新环境中安装的不同版本的 Python 和/或包。在环境之间切换或移动称为激活环境。您还可以共享环境文件。
此页面上描述的命令有许多可用选项。有关所有可用命令的详细参考,请参阅 命令。
使用命令创建环境#
使用终端进行以下步骤
要创建环境
conda create --name <my-env>
将
<my-env>
替换为您环境的名称。当 conda 询问您是否继续时,键入
y
proceed ([y]/n)?
这将在
/envs/
中创建 myenv 环境。此环境中不会安装任何包。要创建具有特定 Python 版本的环境
conda create -n myenv python=3.9
要创建具有特定包的环境
conda create -n myenv scipy
或
conda create -n myenv python conda install -n myenv scipy
要创建具有特定版本包的环境
conda create -n myenv scipy=0.17.3
或
conda create -n myenv python conda install -n myenv scipy=0.17.3
要创建具有特定 Python 版本和多个包的环境
conda create -n myenv python=3.9 scipy=0.17.3 astroid babel
提示
一次性安装您想要在此环境中的所有程序。一次安装一个程序可能会导致依赖冲突。
要每次创建新环境时自动安装 pip 或其他程序,请将默认程序添加到 create_default_packages 配置文件的 .condarc
部分。 每次创建新环境时都会安装默认包。如果您不希望在特定环境中安装默认包,请使用 --no-default-packages
标志
conda create --no-default-packages -n myenv python
提示
您可以向 conda create
命令添加更多内容。有关详细信息,请运行 conda create --help
。
从 environment.yml 文件创建环境#
使用终端进行以下步骤
从
environment.yml
文件创建环境conda env create -f environment.yml
yml
文件的第一行设置新环境的名称。有关详细信息,请参阅 手动创建环境文件。激活新环境:
conda activate myenv
验证新环境是否已正确安装
conda env list
您也可以使用
conda info --envs
。
为环境指定不同的目标平台#
默认情况下,conda
将创建以其当前运行平台为目标的环境。您可以通过运行 conda info
并检查 platform
条目来检查您当前所在的平台。
但是,在某些情况下,您可能想要为不同的目标平台或架构创建环境。为此,请使用 conda create
和 conda env create
命令中提供的 --platform
标志。有关允许值的更多信息,请参阅 conda create 中的 --subdir, --platform
。
例如,在 Apple Silicon 平台上运行 macOS 的用户可能想要为 Intel 处理器创建一个 python
环境,并使用 Rosetta 模拟可执行文件。命令将是
conda create --platform osx-64 --name python-x64 python
注意
您不能为现有环境指定 --platform
标志。创建后,环境将使用自定义配置进行注释,并且对其后续操作将记住目标平台。
此标志还允许指定不同的操作系统(例如,在 macOS 上创建 Linux 环境),但我们不建议在 --dry-run
操作之外使用它。操作系统不匹配的常见问题包括
由于缺少虚拟包,无法解析环境。您可以通过导出必要的
CONDA_OVERRIDE_****
环境变量来解决此问题。例如,从 macOS 为 Linux 求解时,您可能需要CONDA_OVERRIDE_LINUX=1
和CONDA_OVERRIDE_GLIBC=2.17
。可以解析环境,但由于文件系统限制(不区分大小写的系统、不兼容的路径等),提取和链接失败。唯一的解决方法是使用
--dry-run --json
获取解决方案并将有效负载处理成可以与目标机器共享的锁定文件。有关更多详细信息,请参阅 创建显式锁定文件而不创建环境。
为环境指定位置#
您可以通过在创建环境时提供目标目录的路径来控制 conda 环境的存放位置。例如,以下命令将在当前工作目录的子目录中创建一个名为 envs
的新环境
conda create --prefix ./envs jupyterlab=3.2 matplotlib=3.5 numpy=1.21
然后,您可以使用用于激活按名称创建的环境的相同命令来激活使用前缀创建的环境
conda activate ./envs
在创建环境时指定项目目录子目录的路径具有以下好处
通过将环境作为子目录包含在内,可以轻松判断您的项目是否使用了隔离环境。
它使您的项目更加独立,因为所有内容(包括所需的软件)都包含在单个项目目录中。
在子目录中创建项目环境的另一个好处是,您可以为所有环境使用相同的名称。如果您将所有环境都保存在 envs
文件夹中,则必须为每个环境指定不同的名称。
在默认 envs
文件夹之外放置 conda 环境时,需要注意一些事项。
Conda 无法再使用
--name
标志找到您的环境。您通常需要传递--prefix
标志以及环境的完整路径才能找到环境。在创建 conda 环境时指定安装路径会导致您的命令提示符现在以活动环境的绝对路径而不是环境名称为前缀。
使用其前缀激活环境后,您的提示符将类似于以下内容
(/absolute/path/to/envs) $
这可能会导致长前缀
(/Users/USER_NAME/research/data-science/PROJECT_NAME/envs) $
要删除 shell 提示符中的这个长前缀,请修改 .condarc
文件中的 env_prompt 设置
conda config --set env_prompt '({name})'
如果您已经有一个 .condarc
文件,这将编辑您的 .condarc
文件,如果您没有,则创建一个 .condarc
文件。
现在,您的命令提示符将显示活动环境的通用名称,即环境根文件夹的名称
$ cd project-directory
$ conda activate ./env
(env) project-directory $
更新环境#
您可能需要出于多种原因更新您的环境。例如,可能是以下情况:
您的核心依赖项之一刚刚发布了新版本(依赖项版本号更新)。
您需要一个额外的包用于数据分析(添加新依赖项)。
您找到了一个更好的包,不再需要旧包(添加新依赖项并删除旧依赖项)。
如果发生任何这些情况,您所需要做的就是相应地更新您的 environment.yml
文件的内容,然后运行以下命令
conda env update --file environment.yml --prune
注意
--prune
选项使 conda 删除环境中不再需要的任何依赖项。
克隆环境#
使用终端进行以下步骤
您可以通过克隆环境来制作环境的精确副本
conda create --name myclone --clone myenv
注意
将 myclone
替换为新环境的名称。将 myenv
替换为您要复制的现有环境的名称。
要验证副本是否已创建
conda info --envs
在显示的环境列表中,您应该看到源环境和新副本。
构建相同的 conda 环境#
您可以使用显式规范文件在相同的操作系统平台上构建相同的 conda 环境,无论是在同一台机器上还是在不同的机器上。
使用终端进行以下步骤
运行
conda list --explicit
以生成如下的规范列表# This file may be used to create an environment using: # $ conda create --name <env> --file <this file> # platform: osx-64 @EXPLICIT https://repo.anaconda.com/pkgs/free/osx-64/mkl-11.3.3-0.tar.bz2 https://repo.anaconda.com/pkgs/free/osx-64/numpy-1.11.1-py35_0.tar.bz2 https://repo.anaconda.com/pkgs/free/osx-64/openssl-1.0.2h-1.tar.bz2 https://repo.anaconda.com/pkgs/free/osx-64/pip-8.1.2-py35_0.tar.bz2 https://repo.anaconda.com/pkgs/free/osx-64/python-3.5.2-0.tar.bz2 https://repo.anaconda.com/pkgs/free/osx-64/readline-6.2-2.tar.bz2 https://repo.anaconda.com/pkgs/free/osx-64/setuptools-25.1.6-py35_0.tar.bz2 https://repo.anaconda.com/pkgs/free/osx-64/sqlite-3.13.0-0.tar.bz2 https://repo.anaconda.com/pkgs/free/osx-64/tk-8.5.18-0.tar.bz2 https://repo.anaconda.com/pkgs/free/osx-64/wheel-0.29.0-py35_0.tar.bz2 https://repo.anaconda.com/pkgs/free/osx-64/xz-5.2.2-0.tar.bz2 https://repo.anaconda.com/pkgs/free/osx-64/zlib-1.2.8-3.tar.bz2
要将此规范列表创建为当前工作目录中的文件,请运行
conda list --explicit > spec-file.txt
注意
您可以使用
spec-file.txt
作为文件名,或将其替换为您选择的文件名。显式规范文件通常不是跨平台的,因此顶部会有一条注释,例如
# platform: osx-64
,显示创建它的平台。此平台是已知此规范文件可以工作的平台。在其他平台上,指定的软件包可能不可用,或者某些已在规范中的关键软件包可能缺少依赖项。要使用规范文件在同一台机器或另一台机器上创建相同的环境
conda create --name myenv --file spec-file.txt
要使用规范文件将其列出的软件包安装到现有环境中
conda install --name myenv --file spec-file.txt
从规范文件安装时,Conda 不会检查架构或依赖项。为确保软件包正常工作,请确保该文件是从工作环境创建的,并在相同的架构、操作系统和平台(如 linux-64 或 osx-64)上使用它。
激活环境#
激活环境对于使环境中的软件良好运行至关重要。激活包含两个主要功能:为环境将条目添加到 PATH,以及运行环境可能包含的任何激活脚本。这些激活脚本是软件包如何设置对其操作可能必要的任意环境变量的方式。您还可以使用 config API 设置环境变量。
激活会前置到 PATH。这仅在您激活环境时生效,因此它是终端会话本地的,而不是全局的。
注意
当安装 Anaconda 时,您可以选择“将 Anaconda 添加到我的 PATH 环境变量”。不建议这样做,因为它会将 Anaconda 追加到 PATH。当安装程序追加到 PATH 时,它不会调用激活脚本。
注意
在 Windows 上,PATH 由两部分组成,系统 PATH 和用户 PATH。系统 PATH 始终排在第一位。当您为“仅我”安装 Anaconda 时,我们会将其添加到用户 PATH。当您为“所有用户”安装时,我们会将其添加到系统 PATH。在前一种情况下,您最终可能会遇到系统 PATH 值优先于您的条目的情况。在后一种情况下,则不会。我们不建议多用户安装。
要激活环境:conda activate myenv
注意
将 myenv
替换为环境名称或目录路径。
Conda 将路径名 myenv
前置到您的系统命令。
如果您尚未激活环境,您可能会收到警告消息
Warning:
This Python interpreter is in a conda environment, but the environment has
not been activated. Libraries may fail to load. To activate this environment
please see https://conda.io/activation.
如果您收到此警告,则需要激活您的环境。要在 Windows 上执行此操作,请在终端窗口中运行:c:\Anaconda3\Scripts\activate base
。
Windows 对正确的激活非常敏感。这是因为 Windows 库加载器不支持库和可执行文件知道在哪里搜索其依赖项(RPATH)的概念。相反,Windows 依赖于动态链接库搜索顺序。
如果环境未激活,则找不到库,并且会出现很多错误。当子环境中的 Python 找不到必要的 OpenSSL 库时,HTTP 或 SSL 错误是常见错误。
Conda 本身包含一些特殊的解决方法来添加其必要的 PATH 条目。这使其可以在不激活或激活任何子环境的情况下被调用。通常,在不首先激活环境的情况下调用环境中的任何可执行文件都可能无法工作。为了能够在激活的环境中运行可执行文件,您可能对 conda run
命令感兴趣。
如果您在 PATH 中遇到错误,请查看我们的故障排除。
Conda 初始化#
早期版本的 conda 引入了脚本,以使激活行为在不同操作系统之间保持一致。Conda 4.4 允许 conda activate myenv
。Conda 4.6 添加了广泛的初始化支持,以便 conda 在各种 shell(bash、zsh、csh、fish、xonsh 等)上更快且更少破坏性地工作。现在,这些 shell 可以使用 conda activate
命令。消除修改 PATH 的需要使 conda 对系统上其他软件的破坏性更小。有关更多信息,请阅读 conda init --help
的输出。
使用 conda init
时,一个设置可能对您有用
auto_activate_base: bool
此设置控制 conda 在首次启动时是否激活您的 base 环境。无论哪种方式,您都可以使用 conda
命令,但在不激活环境的情况下,环境中的其他程序都将不可用,直到使用 conda activate base
激活环境为止。人们有时会选择此设置来加快 shell 启动的时间,或防止 conda 安装的软件自动隐藏他们的其他软件。
嵌套激活#
默认情况下,conda activate
将在激活新环境之前停用当前环境,并在停用新环境时重新激活它。有时您可能希望保留当前环境 PATH 条目,以便您可以继续轻松访问第一个环境中的命令行程序。当常用命令行实用程序安装在 base 环境中时,最常遇到这种情况。要在 PATH 中保留当前环境,您可以使用以下命令激活新环境
conda activate --stack myenv
如果您希望始终在从最外层环境(通常是 base 环境)开始时堆叠,则可以设置 auto_stack
配置选项
conda config --set auto_stack 1
您可以为更深层次的自动堆叠指定更大的数字,但不建议这样做,因为更深层次的堆叠更可能导致混淆。
用于 DLL 加载验证的环境变量#
如果您不想激活环境,并且希望 Python 用于 DLL 加载验证,请按照故障排除方向进行操作。
警告
如果您选择不激活环境,则加载和设置环境变量以激活脚本将不会发生。我们仅支持激活。
停用环境#
要停用环境,请键入:conda deactivate
Conda 从您的系统命令中删除当前活动环境的路径名。
注意
要简单地返回到 base 环境,最好调用不指定环境的 conda activate
,而不是尝试停用。如果您从 base 环境运行 conda deactivate
,您可能会失去完全运行 conda 的能力。别担心,这仅限于此 shell - 您可以启动一个新的 shell。但是,如果环境是使用 --stack
激活的(或自动堆叠),则最好使用 conda deactivate
。
确定当前环境#
使用终端进行以下步骤。
默认情况下,活动环境(您当前正在使用的环境)显示在命令提示符的开头,用括号 () 或方括号 [] 括起来
(myenv) $
如果您没有看到此提示,请运行
conda info --envs
在显示的环境列表中,您当前的环境会用星号 (*) 突出显示。
默认情况下,命令提示符设置为显示活动环境的名称。要禁用此选项
conda config --set changeps1 false
要重新启用此选项
conda config --set changeps1 true
查看环境列表#
要查看所有环境的列表,请在终端窗口中运行
conda info --envs
或
conda env list
将显示类似于以下的列表
conda environments:
myenv /home/username/miniconda/envs/myenv
snowflakes /home/username/miniconda/envs/snowflakes
bunnies /home/username/miniconda/envs/bunnies
如果此命令由管理员运行,将显示属于所有用户的所有环境的列表。
查看环境中软件包的列表#
要查看特定环境中安装的所有软件包的列表
如果环境未激活,请在终端窗口中运行
conda list -n myenv
如果环境已激活,请在终端窗口中运行
conda list
要查看特定软件包是否安装在环境中,请在终端窗口中运行
conda list -n myenv scipy
在环境中使用 pip#
要在您的环境中使用 pip,请在终端窗口中运行
conda install -n myenv pip
conda activate myenv
pip <pip_subcommand>
将 pip 和 conda 一起使用时可能会出现问题。当结合使用 conda 和 pip 时,最好使用隔离的 conda 环境。只有在使用 conda 安装尽可能多的软件包后,才应使用 pip 安装任何剩余的软件。如果需要对环境进行修改,最好创建一个新环境,而不是在 pip 之后运行 conda。在适当的情况下,conda 和 pip 要求应存储在文本文件中。
我们建议您
- 仅在 conda 之后使用 pip
使用 conda 安装尽可能多的要求,然后使用 pip。
应使用
--upgrade-strategy only-if-needed
(默认值)运行 Pip。请勿将 pip 与
--user
参数一起使用,避免所有用户安装。
- 使用 conda 环境进行隔离
创建一个 conda 环境以隔离 pip 所做的任何更改。
由于硬链接,环境占用空间很小。
应注意避免在 root 环境中运行 pip。
- 如果需要更改,请重新创建环境
一旦使用了 pip,conda 将不会意识到这些更改。
要安装其他 conda 软件包,最好重新创建环境。
- 将 conda 和 pip 要求存储在文本文件中
软件包要求可以通过
--file
参数传递给 conda。Pip 接受带有
-r
或--requirements
的 Python 软件包列表。Conda env 将基于包含 conda 和 pip 要求的文件导出或创建环境。
设置环境变量#
如果您想将环境变量与环境关联,可以使用 config API。建议使用此方法来替代使用激活和停用脚本,因为这些脚本是任意代码的执行,可能不安全。
首先,创建您的环境并激活它
conda create -n test-env
conda activate test-env
要列出您可能拥有的任何变量,请运行 conda env config vars list
。
要设置环境变量,请运行 conda env config vars set my_var=value
。
设置环境变量后,您必须重新激活您的环境: conda activate test-env
。
要检查环境变量是否已设置,请运行 echo $my_var
(在 Windows 上为 echo %my_var%
)或 conda env config vars list
。
当您停用您的环境时,您可以使用相同的命令来查看环境变量是否消失。
您可以使用 -n
和 -p
标志来指定您想要影响的环境。-n
标志允许您命名环境,-p
允许您指定环境的路径。
要取消设置环境变量,请运行 conda env config vars unset my_var -n test-env
。
当您停用您的环境时,您可以重新运行 echo my_var
或 conda env config vars list
,以查看环境变量是否消失。
使用 conda env config vars
设置的环境变量将保留在 conda env export
的输出中。此外,您可以在 environment.yml 文件中声明环境变量,如下所示
name: env-name
channels:
- conda-forge
- defaults
dependencies:
- python=3.7
- codecov
variables:
VAR1: valueA
VAR2: valueB
保存环境变量#
Conda 环境可以包含已保存的环境变量。
假设您希望环境 “analytics” 存储登录服务器所需的密钥和配置文件的路径。以下部分解释了如何在 Windows 和 macOS 或 Linux 上编写名为 env_vars
的脚本来执行此操作。
这种类型的脚本文件可以是 conda 包的一部分,在这种情况下,当包含该包的环境被激活时,这些环境变量将变为活动状态。
您可以随意命名这些脚本。但是,多个包可能会创建脚本文件,因此请务必使用描述性名称,且这些名称不被其他包使用。一种常见的选择是以 packagename-scriptname.sh
的形式命名脚本,或者在 Windows 上,以 packagename-scriptname.bat
的形式命名脚本。
Windows#
通过在命令 shell 中运行
%CONDA_PREFIX%
,在终端窗口中找到 conda 环境的目录。进入该目录并创建以下子目录和文件
cd %CONDA_PREFIX% mkdir .\etc\conda\activate.d mkdir .\etc\conda\deactivate.d type NUL > .\etc\conda\activate.d\env_vars.bat type NUL > .\etc\conda\deactivate.d\env_vars.bat
按如下方式编辑
.\etc\conda\activate.d\env_vars.bat
set MY_KEY='secret-key-value' set MY_FILE=C:\path\to\my\file
按如下方式编辑
.\etc\conda\deactivate.d\env_vars.bat
set MY_KEY= set MY_FILE=
当您运行 conda activate analytics
时,环境变量 MY_KEY
和 MY_FILE
将设置为您写入文件的值。当您运行 conda deactivate
时,这些变量将被删除。
macOS 和 Linux#
通过在终端中运行
echo $CONDA_PREFIX
,在终端窗口中找到 conda 环境的目录。进入该目录并创建以下子目录和文件
cd $CONDA_PREFIX mkdir -p ./etc/conda/activate.d mkdir -p ./etc/conda/deactivate.d touch ./etc/conda/activate.d/env_vars.sh touch ./etc/conda/deactivate.d/env_vars.sh
按如下方式编辑
./etc/conda/activate.d/env_vars.sh
#!/bin/sh export MY_KEY='secret-key-value' export MY_FILE=/path/to/my/file/
按如下方式编辑
./etc/conda/deactivate.d/env_vars.sh
#!/bin/sh unset MY_KEY unset MY_FILE
当您运行 conda activate analytics
时,环境变量 MY_KEY
和 MY_FILE
将设置为您写入文件的值。当您运行 conda deactivate
时,这些变量将被删除。
恢复环境#
Conda 保留对您的环境所做的所有更改的历史记录,因此您可以轻松地“回滚”到以前的版本。要列出对当前环境的每个更改的历史记录:conda list --revisions
要将环境恢复到以前的版本:conda install --revision=REVNUM
或 conda install --rev REVNUM
。
注意
将 REVNUM 替换为修订号。
示例:如果您想将您的环境恢复到修订版本 8,请运行 conda install --rev 8
。
删除环境#
要删除环境,请在终端窗口中运行
conda remove --name myenv --all
您可以改为使用 conda env remove --name myenv
。
要验证环境是否已删除,请在终端窗口中运行
conda info --envs
显示的 environment 列表不应显示已删除的环境。
创建显式锁定文件而不创建环境#
@EXPLICIT
锁定文件允许您(重新)创建环境而无需调用求解器。它们由 @EXPLICIT
标头加上 conda 软件包 URL 列表组成,可以选择后跟其 MD5 或 SHA256 哈希值。
它们可以从现有环境通过 conda list --explicit
获取,如 构建相同的 conda 环境 中所示。
但是,如果您只需要锁定文件怎么办?您是否需要先创建一个临时环境,然后再删除它?幸运的是,有一种方法:您可以在 JSON 模式下调用 conda
,然后使用 jq
处理输出。
提示
您的系统中需要 jq
。如果您还没有安装它,您可以通过 conda
安装它(例如 conda create -n jq jq
)或通过您的系统软件包管理器安装它。
对于 Linux 和 macOS,命令如下所示(将 MATCHSPECS_GO_HERE
替换为您想要的相关软件包)
echo "@EXPLICIT" > explicit.txt
CONDA_PKGS_DIRS=$(mktemp -d) conda create --dry-run MATCHSPECS_GO_HERE --json | jq -r '.actions.FETCH[] | .url + "#" + .md5' >> explicit.txt
Windows 中的语法只需要一些小的更改
echo "@EXPLICIT" > explicit.txt
set "CONDA_PKGS_DIRS=%TMP%\conda-%RANDOM%"
conda create --dry-run MATCHSPECS_GO_HERE --json | jq -r '.actions.FETCH[] | .url + "#" + .md5' >> explicit.txt
set "CONDA_PKGS_DIRS="
生成的 explicit.txt
可用于创建新环境,命令如下
conda create -n new-environment --file explicit.txt