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

激活anaconda环境和直接运行其python可执行文件之间有什么区别?,anaconda,Anaconda,我已经使用Anaconda设置了多个python环境 通常,要“手动”运行脚本,我会打开一个命令行,然后键入: activate my-env python path/to/my/script.py 好的 现在我正在尝试使用调度器自动运行脚本,我想知道两者之间的区别是什么 编写激活环境并执行脚本的批处理(如上面的代码段) 直接从环境(在envs/my enjv/目录中)调用python可执行文件,如下所示: /path/to/envs/my env/python.exe path/to/my/

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

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

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

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

  • 编写激活环境并执行脚本的批处理(如上面的代码段)

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

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


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

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

    对于小脚本,没有区别

    调用外部模块/包时,您应该注意到一个差异
    conda activate
    更改系统路径,以更改命令shell搜索适当功能的方式

    如果为解释器提供完整路径,为独立脚本提供完整路径,那么shell不需要执行查找,因为这比路径具有优先级。这意味着解释器可能会看到脚本,但看不到依赖项

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

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


    可以将每次调用的完整路径传递到解释器和脚本或包位置,但当您需要将其移动到另一台机器时会发生什么?你需要花很多时间把一切都安排得和以前一模一样。另一方面,您可以遵循包过程,系统路径将为您跟踪所有内容。

    只需在您的环境中签出path变量即可。康达激活后,其已扩展为

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

    如果您只是在代码中使用标准库,那么这没有多大区别。但是,如果您依赖外部软件包(如pandas),这是找到模块的先决条件。

    在测试期间,您是否停用了环境?@Alan yes yes我甚至重新启动了命令shell。我在使用特定于该环境的软件包的脚本上使用了它,它仍然有效。yes,因为它们被配置为该环境的一部分。我的意思是不激活,直接运行python。是的,因为您已经告诉系统在哪里可以找到它。如果您没有激活,并且没有提供路径,那么当您调用python时,它必须进行查找以找到合适的解释器和环境。它可能会找到解释器,但不会找到环境。activate背后的理念是避免对所有内容进行完整路径。