我有一个 WebAPI,它包装了一个外部库,该 API 需要能够处理外部库的多个版本。我能想到的处理这个问题的两种方法是:
如果可能的话,我倾向于尝试让#2 工作,因为部署起来会更简单。
为此,我希望能够创建一个 FastAPI 实例,它可以获取要运行的包的版本,然后在进程中运行该函数并返回结果。一个最小的例子是:
from fastapi import FastAPI
import numpy as np
app = FastAPI()
@app.get("/{version}/version")
def get_version(version: str) -> str:
"""
This function will create a venv for the numpy version if it doesnt exist,
and then activate that venv and run the code within as a process on that
virtual environment.
"""
return np.__version__
由于 Python 是一种解释性语言,因此每个环境都链接到与该环境关联的可执行文件,然后该可执行文件解释 Python 代码。您是否考虑过使用 subprocess.run () 来启动匹配的可执行文件以及您想要作为文件参数运行的代码?
import subprocess
python_executable = f"{path_to_enviroment}/bin/python"
command = [python_executable, script_path]
result = subprocess.run(command, capture_output=True, text=True)