代码之家  ›  专栏  ›  技术社区  ›  anon01

激活conda env vs从conda env调用python解释器

  •  1
  • anon01  · 技术社区  · 6 年前

    什么 这两种手术有区别吗?

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

    python3_env . 引擎盖下面还有什么事吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   darthbith    6 年前

    您是对的,激活环境会将一些目录添加到 PATH 环境变量。特别是,这将允许首先运行安装在环境中的任何二进制文件或脚本,而不是基本环境中的二进制文件或脚本。例如,如果您已将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 生成激活 returns a dictionary 需要运行以“激活”环境的命令。

    生成激活 方法被 _yield_commands method ,它被传递到 _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 可能会产生非常不同的结果。