Python/Anaconda - 运行环境 python 可执行文件与激活环境不同吗?

时间:2020-12-30 04:06:00

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

我有一个简单的查询。我有两种在我的虚拟 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-activation-an-anaconda-environment-and-running-it”但是不明白答案。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

当您运行 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),那么如果这些工具安装到环境中也可能很关键,因为如果您有这些工具,可以通过 PATH 找到它们已完成 conda activate,但如果您刚刚运行了 python 解释器,则无法找到。