Лучший способ развернуть сценарий командной строки python? - PullRequest
0 голосов
/ 20 апреля 2020

Я написал linux скрипт передачи файлов в python, который принимает несколько аргументов командной строки / терминала. Он работает на моей машине для разработки, но когда я пытался запустить его на системах своих компаний, я получаю несколько ошибок из-за того, что не установлена ​​одна и та же версия python или установлены все библиотеки.

Час поиска в Google открыл глаза начинающим на мир методов развертывания, контейнеров, виртуализации, заморозки и т. д. c. Если бы не стать экспертом docker в одночасье, какой был бы самый простой способ запустить этот скрипт где-нибудь?

1 Ответ

1 голос
/ 20 апреля 2020

Если вы хотите избежать виртуализации / Docker (что мне кажется правильным), вы можете по крайней мере использовать модуль venv с замороженными зависимостями. Вы можете легко выполнить развертывание непосредственно из источника (без необходимости упаковки) с помощью pip, предоставив соответствующий файл setup.py.

Я использую этот подход для долгое время с множеством развертываний на многих серверах и во многих различных средах. Есть несколько вещей, которые следует учитывать:

  • Ваш код должен быть совместим с Python, доступным на целевой машине. Я использую в основном Debian, поэтому мой код часто должен быть обратно совместимым (Debian довольно консервативен).

  • Необходимо убедиться, что версии зависимостей, установленные во время развертывания, будут работать с твой сценарий Проще всего заморозить версии модулей в setup.py, но я не делаю этого как общее правило - обычно работают более новые версии библиотек.

  • Отдельные venv для каждого проекта ( обычно для каждого хранилища), чтобы избежать конфликтов. В первые дни моего приключения с Python я использовал один супер-виртуал, но это был полный беспорядок. Сегодня нет ничего страшного в том, чтобы использовать несколько мегабайт для разделения сред.

  • Автоматизируйте развертывание (Ansible, Chef что угодно), чтобы делать скучные вещи и никогда не забывать о важных вещах. Я использую Ansible для выполнения повторяющихся вещей, таких как конфигурация системы (пакеты, библиотеки, файлы конфигурации) и Jenkins для повторяющихся вещей, таких как развертывание проекта (так же просто, как запуск pip в соответствующей виртуальной среде).

  • Для подобных демонам скриптов (веб-серверы, watchdogs и т. Д. c.) Я использую supervisor, который очень хорошо работает не только с Python скриптами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...