正在执行在不同虚拟 environment/venv 下构建的 python 脚本?

Executing python script built under different virtual environment/venv?

如果我想要实现的不是 Pythonic,我深表歉意 - 我最近转向了这门语言。

我的项目目录结构如下:

root
--proj1
----venv
----main.py
--proj2
----venv
----main.py

proj1 和 proj2 运行 在各自的虚拟环境下。我正在尝试从 proj1/main.py 调用 proj2/main.py,同时在其自己的 venv 下执行 proj2/main.py。我试过:

import subprocess

s2_out = subprocess.check_output([sys.executable, r"..\proj2\__main__.py", "arg"])

调用成功,但我收到各种未找到的异常等。我猜这就是原因。

如果有更好的方法请告诉我!

嘿,这不是一个完整的答案,但我将如何处理它。 如果您使用 pyenv 那么这就是方法:

  1. 为每个项目制作一个单独的virtualenv。 pyenv virtualenv 3.8 proj1pyenv virtualenv 3.7 proj1 或任何 python 版本。
  2. 在每个目录中使用 pyenv local 到 link 目录到 venvs
  3. cd 到每个目录,在每个目录中 python env 应该激活。使用 pip install 将库安装到每个 venv。
  4. 现在您应该可以访问使用不同库的不同 python 可执行文件,例如~/.pyenv/versions/proj1/bin/python
  5. 因此从 proj1 代码理论上你应该能够做到:
import os;
os.system("~/.pyenv/versions/proj2/bin/python ../proj2/main.py")

或类似的东西。 我实际上并没有尝试过这个,但我相当确定它适用于使用单独的库。

这是pyenv:https://github.com/pyenv/pyenv

明天不困的时候自己试试

你可以这样做:

import subprocess
subprocess.call(["python_interpreter location (python.exe)", "python file"])

所以你可以这样做:

import subprocess
subprocess.call(["../proj2/bin/python.exe", "proj2/main.py"])

对于 Mac OS 和 Linux,venv 的 python 解释器路径将是 folder/bin/python.exe,或者在您的情况下 ../proj2/bin/python.exe.

对于 Windows,venv 的 python 解释器路径将是 folder/scripts/python.exe

您可能需要包含完整路径。

另一种方法是使用 subprocess.call,如果您需要输出:

import subprocess

output = subprocess.call("%s %s" %("../proj2/bin/python.exe", "proj2/main.py"))
print(output)

两种方式都可以正常工作:)