Может ли быть открыт модуль импорта pex из pantsbuild?

#python #fastapi #asgi #pants #nginx-unit

#python #fastapi #asgi #Брюки #nginx-unit

Вопрос:

Кросс-пост из https://github.com/pantsbuild/pex/issues/1181 поскольку я действительно не знал, где спросить об этом.

Я использую модуль Nginx, который имеет конфигурацию ASGI для моего приложения FastAPI. Он работает нормально, но я понятия не имею, как использовать его с PEX.

Я прикрепил его ниже, но важным моментом является то, что для модуля Nginx существует плагин Python, который ищет «модуль» и «вызываемый».

Сейчас это выглядит как «apigateway.main:app», похожий на uvicorn или любую другую реализацию сервера, которую вы используете. В отличие от uvicorn, gunicorn или любого другого — я не думаю, что смогу упаковать какой-либо другой инструмент в свой файл pex и использовать PEX_SCRIPT.

Есть ли какие-либо предложения о том, могу ли я предоставить модуль и переменную за пределами pex?

 {
    "listeners": {
        "*:80": {
            "pass": "routes"
        }
    },
    "routes": [
        {
            "action": {
                "pass": "applications/api"
            }
        }
    ],
    "applications": {
        "api": {
            "type": "python 3.9",
            "path": "/app",
            "module": "apigateway.main",
            "callable": "app",
            "limits": {
                "requests": 100
            },
            "processes": {}
        }
    },
    "access_log": "/var/log/access.log"
}
 

Ответ №1:

Ответ на этот вопрос был дан в тикете Github (https://github.com/pantsbuild/pex/issues/1181 ):

Весь традиционный язык здесь предназначен для перехода к недавней функции инструмента venv pex, выпущенной с Pex 2.1.22. Если вы создаете свой файл PEX с поддержкой venv (добавьте —include-tools в командную строку Pex), вы получаете возможность создавать venv из своего файла PEX. Это одноразовый ручной шаг на целевой машине или изображении:

PEX_TOOLS=1 ./my.pex venv /app, который создаст виртуальную среду, содержащую ваше приложение и его зависимости в /app . Вы можете указать туда модуль Nginx с помощью home. Я сделал все это на https://github.com/jsirois/pex-issues-1181 чтобы доказать, что это работает.