激活anaconda环境和直接运行python可执行文件有什么区别?

时间:2018-05-29 01:54:18

标签: anaconda

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

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

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

精细。

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

  1. 编写一个激活环境并执行脚本的批处理(如上面的代码片段)

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

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

  3. 两者似乎都很好。有什么不同吗?

2 个答案:

答案 0 :(得分:1)

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

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

调用外部模块/软件包时应注意区别。 conda activate改变系统路径以更改命令shell搜索适当功能的方式。

如果提供解释器的完整路径以及隔离脚本的完整路径,则shell不需要执行查找,因为它优先于路径。这意味着您可能处于解释器可以看到脚本但看不到依赖关系的情况。

如果您遵循conda activate进程,并且环境已正确打包,那么shell将能够跟踪任何其他资源。

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

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

答案 1 :(得分:0)

只需在您的环境中检出PATH变量。激活conda后,将其扩展了

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

如果您只是在代码中使用标准库,那么这并没有太大的区别。但是,如果您依赖诸如pandas之类的外部软件包,则必须先找到模块。