我有一个简单的查询。我有两种在我的虚拟 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”但是不明白答案。
答案 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 解释器,则无法找到。