是否可以在Python中使用不同的虚拟环境运行可调用/函数?

问题描述 投票:0回答:1

我有一个 WebAPI,它包装了一个外部库,该 API 需要能够处理外部库的多个版本。我能想到的处理这个问题的两种方法是:

  1. 对于每个版本的库都有多个 API 服务器实例,并使用反向代理根据 URL 参数将流量路由到特定版本
  2. 在 python 中,让 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
1个回答
0
投票

由于 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)
© www.soinside.com 2019 - 2024. All rights reserved.