如何设置要在 python 脚本中使用的 conda 环境

mox*_*mox 7 python conda

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

假设stepA.py调用 from workflow.py,一种可能性是设置两个 conda env,一个使用 python2.7,另一个使用 python3.7,workflow.py在py2env 中运行并编写类似

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

workflow.py启动stepA.py

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

#!/usr/bin/env python2.7
Run Code Online (Sandbox Code Playgroud)

而不是简单地

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

在我看来,第二种解决方案更加原子化和干燥。

我试过类似的东西

$ 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
Run Code Online (Sandbox Code Playgroud)

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

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

Aru*_*tel 2

你应该给出你的Python的完整路径,它应该作为可执行文件给出

例如:

#!/usr/bin/env /user/intelpython/latest/envs/py3env/bin/python
code
Run Code Online (Sandbox Code Playgroud)

在此/user/intelpython/latest/envs/py3env/bin/python(我到特定 python 的完整路径)可以是 python3 或 2 要获取绝对路径,请激活环境并使用which python命令