【问题标题】:Python/Anaconda - Is running the environment python executable different than activating the environment?Python/Anaconda - 运行环境 python 可执行文件与激活环境不同吗?
【发布时间】:2020-12-30 04:06:00
【问题描述】:

我有一个简单的查询。我有两种在我的虚拟 anaconda 环境中运行 python 脚本的方法。

备选方案 1:

conda activate my_env
python3 my_python_script

备选方案 2:

~/anaconda3/envs/my_env/bin/python3 my_python_script

所以,我不明白这两种选择有什么区别。我了解激活环境时,“~/anaconda3/envs/my_env/bin”被添加到PATH,但我不知道是否发生了其他事情。至少我尝试过的python脚本没有区别,但我想知道在哪些情况下会有所不同。

以防万一,我已经看到“https://stackoverflow.com/questions/50575330/what-is-the-difference-between-activating-an-anaconda-environment-and-running-it”但是没看懂答案。

【问题讨论】:

    标签: python python-3.x anaconda miniconda anaconda3


    【解决方案1】:

    我的 2cent 是尝试运行 ~/anaconda3/envs/my_env/bin/python3 -m site 并查看 sys.path 是否指向 conda 环境中的站点包。如果是这样,我会说几乎没有区别。

    如果不是,那么我会怀疑当 python 二进制文件使用 conda env 时,站点包却不是。

    【讨论】:

    • 两种情况下的输出完全相同。所以我认为这两种选择都是一样的。
    【解决方案2】:

    当您运行import 命令时,python 解释器将检查相同的目录。但是要说,因此,如果你这样做并不重要

    conda activate my_env
    python my_python_script
    

    ~/anaconda3/envs/my_env/bin/python my_python_script
    

    太简单了。主要区别在于conda activate 修改了PATH 环境变量,即使在运行“简单”脚本时也可能变得至关重要。我将尝试详细说明一些可能会产生影响的情况

    在linux机器上,我可以做到

    ~/Software/miniconda3/envs/py37/bin/python -c "import numpy"
    

    没问题。但是已经在 Windows 机器上,当我尝试类似的东西时:

    C:\Users\Florian\miniconda3\envs\py38\python.exe -c "import numpy"
    

    我收到 DLL load failed while importing _multiarray_umath 错误,而

    conda activate py38
    python -c "import numpy"
    

    没有问题。因此,运行任何依赖于 numpy(或其他尝试加载 DLL 的模块)的脚本都会失败,因为检测所述 DLL 依赖于它们在 PATH 中的路径,它们位于conda activate 之后。

    如果您的 python 脚本正在运行任何外部工具(例如,通过 subprocess.popen),那么如果这些工具安装到 env 中也可能很关键,因为如果您已经完成,它们可以通过 PATH 找到 @ 987654332@,但是如果你刚刚运行了python解释器explicity就找不到了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 2016-11-28
      • 2020-03-14
      • 2021-09-06
      • 2020-01-21
      • 2019-02-25
      • 2017-08-22
      相关资源
      最近更新 更多