使用子流程调用()在Python virtualenv中如何停用子进程的venv

2024-05-23 17:44:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Pycharm进行Python开发。代码正在Pycharm venv中运行,我想从中调用一个bash脚本,激活和停用conda环境(这个:https://github.com/lykaust15/DeepSimulator)。你知道吗

因此,据我所知,在通过subprocess.call()调用脚本时,我需要停用Pycharm venv。否则我会出错。我该怎么做?你知道吗

我的电话是:

        result = subprocess.call([deppsim_path, "-i", fasta, "-c", "4",
                              "-C", "1", "-n", "100",
                              "-H", os.path.dirname(deppsim_path),
                              "-o", tmp_path], shell=False)

编辑:

一些错误:

/home/user/path/bin/venv/bin/python /home/user/path/bin/sim_seq.py
Pre-process input genome...
/home/user/path/bin/DeepSimulator/deep_simulator.sh: Zeile 207: deactivate: Datei oder Verzeichnis nicht gefunden
Pre-process input genome done!
Executing the preprocessing step...
Traceback (most recent call last):
  File "/home/user/path/bin/DeepSimulator/util/genome_sampling.py", line 5, in <module>
    import scipy.stats as st
ImportError: No module named scipy.stats

Tags: pathpy脚本homegenomebinvenvcall
1条回答
网友
1楼 · 发布于 2024-05-23 17:44:00

始终可以使用python可执行文件的完整路径调用特定的python安装,包括虚拟环境。所以这就是你的答案。使用python二进制文件的完整路径,该二进制文件位于要用于运行子流程的实际python安装中,并且在运行子流程时不会涉及任何虚拟环境。你知道吗

作为一个例子,下面是我的系统上两个Python二进制路径的样子:

> which python
/usr/local/bin/python
> venv development
> which python
/Users/stevenjohnson/envs/development/bin/python

所以/usr/local/bin/python是我实际安装的python2.7,而/Users/stevenjohnson/envs/development/bin/python是我的“开发”虚拟环境。因此,如果我在虚拟环境中运行主程序,但如果我在子进程调用中调用/usr/local/bin/python,子进程将使用基本的python2.7安装运行。你知道吗

相关问题 更多 >