使用两个不同的环境在其他 python 脚本中调用 python 脚本

Calling a python script inside other python script using two different envs

我有两个不同的 Django 应用程序,都在同一个 Linux 服务器中 运行ning(Ubuntu 18.04 LTS),使用 Python 3.6 64 位。

app A 在 Django 1.11 中 运行ning 和 virtualenv A.

app B 在 Django 2.1 中 运行ning 和 virtualenv B.

App B 我需要调用一个函数来迁移 App A 中的表,当我 运行 shell 中的命令一切正常。

/path/to/envA/python /path/to/appA/manage.py migrate

但是当我尝试 运行 使用 subprocess 在 App B 中执行相同的命令 时,我有一个 没有模块错误,我怀疑这是因为不同的envs.

这是我在 App B 中的代码:

subprocess.Popen(["/path/to/envA/python", "/path/to/appA/manage.py", "migrate"], 
                 stdin=subprocess.PIPE,
                 stdout=subprocess.PIPE,
                 stderr=subprocess.PIPE)

我还尝试过使用 shell=True 但这不起作用并冻结了我的控制台。

我能够通过在 Popen 函数中传递 env 变量来解决这个问题:

subprocess.Popen(["/path/to/envA/python", "/path/to/appA/manage.py", "migrate"], 
                 stdin=subprocess.PIPE,
                 stdout=subprocess.PIPE,
                 stderr=subprocess.PIPE,
                 env={"PATH": "/path/to/envA/python"})