如果我要实现的目标不是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"])
这成功地调用了,但是我得到了各种未找到的异常等。我猜这就是原因。
请告诉我是否有更好的方法!
答案 0 :(得分:2)
您可以这样做:
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)
两种方法都可以正常工作:)
答案 1 :(得分:1)
嘿,这不是一个完整的答案,但这是我的解决方法。
如果您使用pyenv
,则可以采用以下方法:
pyenv virtualenv 3.8 proj1
和pyenv virtualenv 3.7 proj1
或任何python版本。pyenv local
将目录链接到venvs cd
到每个目录,并在每个目录中激活python env。使用pip install
将库安装到每个venv。~/.pyenv/versions/proj1/bin/python
import os;
os.system("~/.pyenv/versions/proj2/bin/python ../proj2/main.py")
或类似的东西。 我实际上并没有尝试过,但是我相当确定它可以用于使用单独的库。
这里是pyenv:https://github.com/pyenv/pyenv
明天我不困时我会自己尝试的。