今天在设计pipeline时遇见一个问题,想利用python调用conda环境!直接使用os.system()发现一些问题。
首先python的system进程创建有以下特点:
1)父进程的环境变量会默认传递到子进程中
2)使用system函数,子进程无法影响父进程中的环境变量
简单的说就是每一条os.system命令都是独立的。
如:os.system(CMD1)和os.system(CMD2)的环境不会共享,如果你想在同一个环境下运行CMD1和CMD2,那么你的命令应该写成
os.system(CMD1 && CMD2)
或者
os.system(CMD1 && CMD2)
现在有了这个前置的知识,我们现在来解决python中如果调用conda环境。如我需要调用conda环境的openms(linux一般默认conda会初始化在你的.bashrc文件中;windows直接在conda的CMD中执行切换即可),下面以在linux环境下切换为例说明:
os.system("source ~/.bashrc ; conda activate openms; CMD1; CMD2")
参考资料:
1.https://docs.python.org/2/library/os.html#os.system
陈浩
修正文章中一处错误,conda多命令除了
os.system(CMD1 && CMD2)
还可以
os.system(CMD1 ; CMD2)
注:所有符号都是英文状态下的符号