激活conda环境时如何设置具体的环境变量?
How to set specific environment variables when activating conda environment?
有谁知道在conda中激活env时如何自动设置环境变量?
我曾尝试编辑 */bin/activate,但这会为创建的每个新环境添加新的环境变量。我想设置特定于每个环境的环境变量。
使用文件 $CONDA_PREFIX/etc/conda/activate.d
和 $CONDA_PREFIX/etc/conda/deactivate.d
,其中 $CONDA_PREFIX
是环境的路径。
参考the section on managing environments in the official documentation。
接受的答案(conda/activate.d
和 conda/deactivate.d
)工作得很好,但是如果你想在不把 整个 环境也进入版本控制。通常,您只想在版本控制中存储 environment.yml
文件。
(我知道这并不适用于所有项目 - 有时使用环境变量的全部原因是 防止 特定配置存储在版本控制中。)
我的偏好(在 Windows 上,但同样的原则适用于 Linux)是在项目目录的根目录中创建一个(版本控制的)activate.cmd
文件设置环境变量,然后调用 conda 自己的 activate.bat 脚本。
示例(每个项目的 pylint 配置):
set PYLINTRC=%cd%\pylintrc
@activate.bat %cd%\env
请注意,在 Windows 上,至少您必须在 调用 activate.bat
之前设置环境变量 ,因为对 activate.bat
的调用永远不会 returns 到调用批处理文件。您还必须将自己的脚本命名为 activate.bat
以外的名称以避免递归,这就是我选择 cmd
扩展名的原因(在这种情况下,Windows 将其视为批处理文件) .
所以对于 Ubuntu 上的 virtualenv,我做了下面的操作,我的虚拟环境名称是 my_env,我想保留的环境变量是 VAR_A 和 VAR_B:
virtualenv my_env
vim my_env/bin/activate
这将打开文件,您可以将环境变量附加到文件末尾,如下所示:
# This is me env variables to persist
export VAR_A=/home/developer/my_workspace/var_a
export VAR_B=/home/developer/my_workspace/var_b
然后退出文件。
激活你的 virtualenv
source my_env/bin/activate
那么你的环境变量应该是好的。可以像下面这样验证:
printenv | grep VAR_
VAR_B=/home/developer/my_workspace/var_b
VAR_A=/home/developer/my_workspace/var_a
作为配置设置的环境变量
Conda v4.8 在 conda-env
工具中引入了一个新的命令行界面,用于在每个环境的基础上管理环境变量。该命令是 conda env config vars
,这里是从 v4.8.3 开始对整个命令的帮助说明:
$ conda env config vars -h
usage: conda-env config vars [-h] {list,set,unset} ...
Interact with environment variables associated with Conda environments
Options:
positional arguments:
{list,set,unset}
list List environment variables for a conda environment
set Set environment variables for a conda environment
unset Unset environment variables for a conda environment
optional arguments:
-h, --help Show this help message and exit.
examples:
conda env config vars list -n my_env
conda env config vars set MY_VAR=something OTHER_THING=ohhhhya
conda env config vars unset MY_VAR
可能有点冗长,但它避免了必须手动管理 etc/conda/(de|)activate.d
中的文件。
YAML 规范
在 Conda v4.9 中添加,现在支持自动定义特定于环境的变量作为环境 YAML 定义的一部分。例如,
name: foo
channels:
- defaults
dependencies:
- python
variables:
MY_VAR: something
OTHER_VAR: ohhhhya
这将设置环境变量 MY_VAR
和 OTHER_VAR
,分别在环境激活和停用时设置和取消设置。
有谁知道在conda中激活env时如何自动设置环境变量? 我曾尝试编辑 */bin/activate,但这会为创建的每个新环境添加新的环境变量。我想设置特定于每个环境的环境变量。
使用文件 $CONDA_PREFIX/etc/conda/activate.d
和 $CONDA_PREFIX/etc/conda/deactivate.d
,其中 $CONDA_PREFIX
是环境的路径。
参考the section on managing environments in the official documentation。
接受的答案(conda/activate.d
和 conda/deactivate.d
)工作得很好,但是如果你想在不把 整个 环境也进入版本控制。通常,您只想在版本控制中存储 environment.yml
文件。
(我知道这并不适用于所有项目 - 有时使用环境变量的全部原因是 防止 特定配置存储在版本控制中。)
我的偏好(在 Windows 上,但同样的原则适用于 Linux)是在项目目录的根目录中创建一个(版本控制的)activate.cmd
文件设置环境变量,然后调用 conda 自己的 activate.bat 脚本。
示例(每个项目的 pylint 配置):
set PYLINTRC=%cd%\pylintrc
@activate.bat %cd%\env
请注意,在 Windows 上,至少您必须在 调用 activate.bat
之前设置环境变量 ,因为对 activate.bat
的调用永远不会 returns 到调用批处理文件。您还必须将自己的脚本命名为 activate.bat
以外的名称以避免递归,这就是我选择 cmd
扩展名的原因(在这种情况下,Windows 将其视为批处理文件) .
所以对于 Ubuntu 上的 virtualenv,我做了下面的操作,我的虚拟环境名称是 my_env,我想保留的环境变量是 VAR_A 和 VAR_B:
virtualenv my_env
vim my_env/bin/activate
这将打开文件,您可以将环境变量附加到文件末尾,如下所示:
# This is me env variables to persist
export VAR_A=/home/developer/my_workspace/var_a
export VAR_B=/home/developer/my_workspace/var_b
然后退出文件。
激活你的 virtualenv
source my_env/bin/activate
那么你的环境变量应该是好的。可以像下面这样验证:
printenv | grep VAR_
VAR_B=/home/developer/my_workspace/var_b
VAR_A=/home/developer/my_workspace/var_a
作为配置设置的环境变量
Conda v4.8 在 conda-env
工具中引入了一个新的命令行界面,用于在每个环境的基础上管理环境变量。该命令是 conda env config vars
,这里是从 v4.8.3 开始对整个命令的帮助说明:
$ conda env config vars -h
usage: conda-env config vars [-h] {list,set,unset} ...
Interact with environment variables associated with Conda environments
Options:
positional arguments:
{list,set,unset}
list List environment variables for a conda environment
set Set environment variables for a conda environment
unset Unset environment variables for a conda environment
optional arguments:
-h, --help Show this help message and exit.
examples:
conda env config vars list -n my_env
conda env config vars set MY_VAR=something OTHER_THING=ohhhhya
conda env config vars unset MY_VAR
可能有点冗长,但它避免了必须手动管理 etc/conda/(de|)activate.d
中的文件。
YAML 规范
在 Conda v4.9 中添加,现在支持自动定义特定于环境的变量作为环境 YAML 定义的一部分。例如,
name: foo
channels:
- defaults
dependencies:
- python
variables:
MY_VAR: something
OTHER_VAR: ohhhhya
这将设置环境变量 MY_VAR
和 OTHER_VAR
,分别在环境激活和停用时设置和取消设置。