【问题标题】:activating conda env vs calling python interpreter from conda env激活 conda env 与从 conda env 调用 python 解释器
【发布时间】:2018-08-21 20:40:03
【问题描述】:

究竟这两个操作有什么区别?

source activate python3_env && python my_script.py~/anaconda3/envs/python3_env/bin/python my_script.py?

似乎激活环境会在 $PATH 中添加一些变量,但第二种方法似乎可以访问安装在 python3_env 中的所有模块。引擎盖下还有其他事情吗?

【问题讨论】:

  • 引擎盖下没有其他内容。看看~/anaconda3/envs/python3_env/bin/python -c 'import sys; print(sys.path)'
  • @NehalJWani 这是不正确的。请参阅下面的答案。
  • @anon01 conda (>=4.4) 最新版本的命令是conda activate env_name,而不是source activate env_name

标签: environment-variables anaconda conda


【解决方案1】:

你是对的,激活环境会将一些目录添加到PATH 环境变量中。特别是,这将允许首先运行安装在环境中的任何二进制文件或脚本,而不是基础环境中的二进制文件或脚本。例如,如果您已将 IPython 安装到您的环境中,则激活环境允许您编写

ipython

在环境中启动 IPython,而不是

/path/to/env/bin/ipython

此外,环境可能具有添加或编辑其他环境变量的脚本,这些环境变量会在环境激活时执行(请参阅conda docs)。这些脚本可以对 shell 环境进行任意更改,包括甚至更改 PYTHONPATH 以更改加载包的位置。

最后,我写了一个非常详细的答案,说明那里的代码到底发生了什么:Conda: what happens when you activate an environment? 虽然这可能是最新的,也可能不是最新的。答案的相关部分是:

...build_activate method adds the prefix to the PATH 通过_add_prefix_to_path method。最后,build_activate 方法returns a dictionary 需要运行以“激活”环境的命令。

再深入一步...从build_activate 方法返回的字典被_yield_commands method 处理成shell 命令,这些命令被传递给_finalize 方法。 activate 方法返回运行 the _finalize method 的值,该值返回临时文件的名称。临时文件具有设置所有适当环境变量所需的命令。

现在,退一步说,在activate.main 函数中,execute 方法的返回值(即临时文件的名称)是printed to stdout。这个临时文件名被存储在 Bash 变量 ask_conda 回到 _conda_activate Bash 函数中,最后,临时文件由 eval Bash 函数执行。

因此您可以看到,根据环境,运行 conda activate python3_env && python my_script.py~/anaconda3/envs/python3_env/bin/python my_script.py 可能会产生非常不同的结果。

【讨论】:

  • 这正是我想要的解释。清晰透彻。
猜你喜欢
  • 1970-01-01
  • 2019-08-25
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
  • 2017-06-14
  • 1970-01-01
相关资源
最近更新 更多