我需要在相同的环境中运行一个使用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.py
和stepA.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的解决方案似乎不起作用。
在脚本内部设置环境的正确方法是什么(在#!
行中还是使用其他策略)?
conda run
中使用-n
标志来命名环境。 - mervconda init
并定义了conda
?请说明你如何启动脚本。例如,./workflow.py
? - merv