正在执行在不同虚拟 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
那么这就是方法:
- 为每个项目制作一个单独的virtualenv。
pyenv virtualenv 3.8 proj1
和 pyenv virtualenv 3.7 proj1
或任何 python 版本。
- 在每个目录中使用
pyenv local
到 link 目录到 venvs
cd
到每个目录,在每个目录中 python env 应该激活。使用 pip install
将库安装到每个 venv。
- 现在您应该可以访问使用不同库的不同 python 可执行文件,例如
~/.pyenv/versions/proj1/bin/python
- 因此从 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)
两种方式都可以正常工作:)
如果我想要实现的不是 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
那么这就是方法:
- 为每个项目制作一个单独的virtualenv。
pyenv virtualenv 3.8 proj1
和pyenv virtualenv 3.7 proj1
或任何 python 版本。 - 在每个目录中使用
pyenv local
到 link 目录到 venvs cd
到每个目录,在每个目录中 python env 应该激活。使用pip install
将库安装到每个 venv。- 现在您应该可以访问使用不同库的不同 python 可执行文件,例如
~/.pyenv/versions/proj1/bin/python
- 因此从 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)
两种方式都可以正常工作:)