管理环境#
使用 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 环境的位置。例如,以下命令将在当前工作目录的子目录中创建一个新环境,名为 envs
conda create --prefix ./envs jupyterlab=3.2 matplotlib=3.5 numpy=1.21
然后,使用与激活按名称创建的环境相同的命令来激活使用前缀创建的环境
conda activate ./envs
在创建环境时为项目目录的子目录指定路径具有以下优点
通过将环境作为子目录包含在内,可以轻松判断您的项目是否使用隔离环境。
它使您的项目更加独立,因为所有内容(包括所需软件)都包含在单个项目目录中。
在子目录中创建项目环境的另一个好处是,您随后可以使用相同的名字来命名所有环境。如果您将所有环境都保存在 envs
文件夹中,则必须为每个环境指定不同的名称。
在将 conda 环境放置在默认的 envs
文件夹之外时,有一些事项需要注意。
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
文件(如果您没有)。
现在,您的命令提示符将显示活动环境的通用名称,即环境根文件夹的名称。
$ 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条目并运行环境可能包含的任何激活脚本。这些激活脚本是包如何设置其操作可能需要的任意环境变量。您也可以使用配置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 init#
早期版本的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在首次启动时是否激活您的基本环境。无论哪种方式,您都可以使用conda
命令,但在不激活环境的情况下,环境中的其他程序都将不可用,直到使用conda activate base
激活环境。有些人选择此设置是为了加快shell启动时间,或防止conda安装的软件自动隐藏其其他软件。
嵌套激活#
默认情况下,conda activate
将在激活新环境之前停用当前环境,并在停用新环境时重新激活它。有时,您可能希望将当前环境的PATH条目保留在适当的位置,以便您可以继续轻松地访问第一个环境中的命令行程序。这在基本环境中安装了常见命令行实用程序时最常遇到。要保留PATH中的当前环境,您可以使用以下命令激活新环境
conda activate --stack myenv
如果您希望始终从最外层环境(通常是基本环境)进行堆叠,则可以设置auto_stack
配置选项
conda config --set auto_stack 1
您可以指定一个更大的数字以获得更深的自动堆叠级别,但我们不建议这样做,因为更深的堆叠级别更有可能导致混乱。
用于DLL加载验证的环境变量#
如果您不想激活环境,并且希望Python用于DLL加载验证,请遵循故障排除说明.
警告
如果您选择不激活环境,则不会发生加载和设置环境变量以激活脚本。我们只支持激活。
停用环境#
要停用环境,请键入:conda deactivate
Conda从您的系统命令中删除当前活动环境的路径名。
注意
要简单地返回到基本环境,最好调用没有指定环境的conda activate
,而不是尝试停用。如果您从基本环境运行conda deactivate
,您可能会完全失去运行conda的能力。别担心,这对于这个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。
pip 应使用
--upgrade-strategy only-if-needed
(默认值)运行。不要使用 pip 的
--user
参数,避免所有用户的安装。
- 使用 conda 环境进行隔离
创建一个 conda 环境来隔离 pip 做出的任何更改。
由于硬链接,环境占用空间很少。
应注意避免在根环境中运行 pip。
- 如果需要更改,请重新创建环境
一旦使用了 pip,conda 将无法识别这些更改。
要安装其他 conda 软件包,最好重新创建环境。
- 将 conda 和 pip 要求存储在文本文件中
可以使用
--file
参数将软件包要求传递给 conda。pip 接受使用
-r
或--requirements
的 Python 软件包列表。Conda env 将根据包含 conda 和 pip 要求的文件导出或创建环境。
设置环境变量#
如果要将环境变量与环境关联,可以使用 config API。建议将其用作使用 activate 和 deactivate 脚本的替代方法,因为这些脚本是可能不安全的任意代码的执行。
首先,创建您的环境并激活它
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
(echo %my_var%
在 Windows 上) 或 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
显示的环境列表中不应显示已删除的环境。