【问题标题】:What is the difference between activating an anaconda environment and running its python executable directly?激活 anaconda 环境和直接运行其 python 可执行文件有什么区别?
【发布时间】:2019-06-06 22:39:58
【问题描述】:

我已经使用 Anaconda 设置了多个 python 环境。

通常,要“手动”运行脚本,我会打开命令行然后键入:

activate my-env
python path/to/my/script.py

很好。

现在我正在尝试使用调度程序自动运行脚本,我想知道两者之间有什么区别

  1. 编写一个激活环境并执行脚本的批处理(如上面的 sn-p)

  2. 直接从环境(envs/my-enjv/ 目录中)调用 python 可执行文件,如下所示:

    /path/to/envs/my-env/python.exe path/to/my/script.py

两者似乎都可以正常工作。有什么区别吗?

【问题讨论】:

  • 在您的测试之间,您是否停用了环境?
  • @Alan 是的,是的,我什至重新启动了命令命令 shell。

标签: anaconda


【解决方案1】:

我不自称是专家,但这是我的 2 美分。

对于小型脚本,不,没有区别。

调用外部模块/包时,您应该注意到不同之处。 conda activate 更改系统路径以更改命令外壳搜索适当功能的方式。

如果您提供解释器的完整路径和独立脚本的完整路径,则 shell 不需要进行查找,因为它的优先级高于路径。这意味着您可能处于解释器可以看到脚本但看不到依赖项的情况。

如果您遵循conda activate 流程,并且正确打包了环境,那么shell 将能够跟踪任何额外的资源。

编辑:这背后的想法是可移植性。如果管理员在设置系统时非常小心,那么脚本应该具有适当的可见性 - 即查看其环境中的所有内容以及主系统安装中的所有内容。

可以对解释器和脚本或包位置的每次调用进行完整路径,但是当您需要将其移动到另一台机器时会发生什么?您将需要花费大量时间完全按照以前的方式设置所有内容。另一方面,您可以按照打包过程进行操作,系统路径会为您跟踪所有内容。

【讨论】:

  • 好吧,我在使用特定于该环境的包的脚本上使用了它,它仍然有效。
  • 是的,因为它们被配置为该环境的一部分。
  • 我的意思是不激活,直接运行python。
  • 是的,因为您已经告诉系统在哪里可以找到它。如果您没有激活,并且您没有提供路径,那么当您调用 python 时,它必须进行查找以找到合适的解释器和环境。它可能会找到解释器,但不会找到环境。激活背后的想法是避免必须对所有内容进行全路径。
【解决方案2】:

只需检查环境中的 PATH 变量即可。 conda 激活后,它已被扩展

\Anaconda3;
\Anaconda3\Library\mingw-w64\bin;
\Anaconda3\Library\usr\bin;
\Anaconda3\Library\bin;
\Anaconda3\Scripts;
\Anaconda3\bin;

如果您只是在代码中使用标准库,这并没有太大的区别。但是,如果您依赖于 pandas 等外部包,这是一个先决条件,以便可以找到模块。

【讨论】:

    最近更新 更多