Кросс-пост из Stack Overflow, так как это, возможно, не по теме.
Я пытаюсь использовать pipenv для распространения приложения Python на сервер (в данном случае это Windows, но у меня аналогичная неопределенность с Linux).
Ранее я сделал следующее:
- Установите общесистемный Python
pip установить pipenv
затем установка пайпэнв
и пипенв бежать
как обычно. Это имеет то преимущество (я думаю), что любой пользователь или действительно пользователь сервиса может выполнять эти команды. Моя цель состоит в том, чтобы приложение Python обычно запускалось как служба (используя nssm в Windows), но в случае сбоя это может быть запущено любым пользователем без необходимости установки pipenv.
Однако официальные документы советуют пользователю устанавливать «избегайте нарушения системных пакетов». pip установить --user pipenv
или через пикс
. В обоих случаях двоичный файл pipenv оказывается в пользовательской папке, которую необходимо добавить в PATH, если вы не хотите ссылаться на нее, используя полный путь. Мне кажется неправильным иметь службу, указывающую на двоичный файл в моих личных папках, точно так же другим пользователям придется устанавливать свои собственные pipenv или добавлять мои папки в свои пути. Все это кажется очень странным, но, возможно, я что-то упустил. Что-то не так с моим подходом? Существует ли подход «наилучшей практики» к использованию pipenv для развертывания?
Некоторая дальнейшая путаница
Я еще немного поэкспериментировал с этим и понял, что даже когда pipenv установлен на системном уровне, «виртуальные envs» создаются на уровне пользователя. Однако я вижу, что это можно изменить с помощью переменной среды, чтобы поместить «virtualenv» внутри проекта. Кроме того, я обнаружил, что в Windows я не могу заставить pipenv работать из службы, поскольку он, похоже, не активирует virtualenv. Вместо этого мне пришлось создать пакетный файл, который активирует virtualenv и выполняет main.py, а затем указывает на это NSSM.
TLDR:
Я ищу рабочий процесс развертывания с использованием программного обеспечения pipenv для Python, который будет запускаться как служба *. В идеале я хотел бы, чтобы это не зависело от платформы, чтобы я мог использовать аналогичный рабочий процесс на серверах Windows и Linux.
* В Windows я намерен использовать NSSM для запуска службы, в Linux — systemd. Я доволен этими инструментами, меня смущает pipenv.