我正在使用子进程从 Python 脚本启动一个新进程。在这个新进程中,应该激活一个新的虚拟环境,但由于某种原因旧环境仍然处于活动状态,为了停用旧环境,我使用 deactivate 调用。
我的剧本
commands = """
call deactivate
pip install -r req.txt
./venv/Scripts/activate
""".format(script_to_run)
result = subprocess.run(commands, shell=True, executable='/bin/bash')
如何在 Linux 中实现同样的效果?
你所做的本质上是:
bash
流程bash
bash
过程。
bash
子进程
中。父进程,即运行 Python 程序的进程,不会改变
。 要更改
当前运行、Python 解释器、exec
虚拟环境中
activate_this.py
子目录中的 Scripts
文件的虚拟环境:ACTIVATOR = "/full/path/to/the/activate_this.py"
exec(open(ACTIVATOR).read(), {"__file__": ACTIVATOR})
因此,如果您在
/home/roman/venv1
中创建了一个虚拟环境,那么
ACTIVATOR
应设置为 /home/roman/venv1/Scripts/activate_this.py