如何在Python脚本中设置conda环境

8

我需要在相同的环境中运行一个使用Python 2.7的脚本workflow.py和另一个使用Python 3.7的脚本stepA.py

假设stepA.py是从workflow.py中调用的,一种可能的解决方案是设置两个conda环境,一个使用python2.7,另一个使用python3.7,在py2env中运行workflow.py并编写如下内容:

subprocess.run('bash -c "source activate py3env; stepA.py"', shell=True)

workflow.py中启动stepA.py

我不喜欢这个解决方案,相反,我想通过指定要使用的Python版本来修改workflow.pystepA.py的第一行,例如:

#!/usr/bin/env python2.7

不仅仅是简单地

#!/usr/bin/env python

在我看来,第二种解决方案更加简洁和干净。

我尝试了类似于

$ conda --version
conda 4.7.12
$ conda create -n py3env python=3.8
[...]
$ conda env list
# conda environments:
base                  *  /sto1/ref/miniconda2
py3env                   /sto1/ref/miniconda2/envs/py3env
$ cat ./test.py
#!/usr/bin/env conda run -n py3env python
import os,sys
print sys.executable
print os.__file__
$ ./test.py
/usr/bin/env: conda run -n pheatmap_1 python: No such file or directory

所以,使用conda run的解决方案似乎不起作用。

在脚本内部设置环境的正确方法是什么(在#!行中还是使用其他策略)?


重复问题:如何在子shell中激活conda环境?。在您的情况下,您需要在conda run中使用-n标志来命名环境。 - merv
嗨@merv,我添加了-n但仍然无法工作,请查看编辑后的问题中它给我的错误。 - mox
看起来好像没有找到 Conda?你运行脚本的 shell 是否已经设置为使用 Conda?也就是说,你是否已经运行了 conda init 并定义了 conda?请说明你如何启动脚本。例如,./workflow.py - merv
@merv 我编辑了问题并添加了完整的测试。 - mox
我要注意的是,当我在一个新系统上安装最新的conda时,遇到了“conda run”无法工作的问题,大约是在发布这个问题时。阅读文档,看起来他们禁用了这个功能。降低conda版本让我再次运行“conda run”,这对我的工作流程至关重要,因为我有不同代码方面必须一起运行,但会相互干扰,所以必须在不同的conda环境中运行。 - Stuart Robbins
1个回答

2
你应该提供完整的Python路径,这个路径应该被指定为可执行文件。
例如:
#!/usr/bin/env /user/intelpython/latest/envs/py3env/bin/python
code

在这个路径 /user/intelpython/latest/envs/py3env/bin/python 中,可以是python3或2。
要获取绝对路径,请启用环境并使用 which python 命令。


谢谢你提供整数变量,但是硬编码路径会导致这个解决方案不具备可移植性。我想知道是否有更好的解决方案。 - mox
好的...有道理。 - ArunJose
Python2.7是您的Python 2可执行文件的正确名称,并且已添加到路径中吗? - ArunJose
你可以使用命令检查 "which python2.7" 是否返回其路径。 - ArunJose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接