Python - упаковка исходного дистрибутива

В настоящее время я пишу программу на Python и хочу распространить ее среди некоторых пользователей (и разработчиков). Я хотел бы сократить количество необходимых шагов для запуска программы до минимума.

Мой вариант использования относительно прост. Я хотел бы, чтобы процесс / инструмент / что угодно:

А) Загрузите список пакетов, необходимых для работы приложения.

Б) Запустите список сценариев Python, последовательно (например, создать базу данных, а затем запустить миграцию).

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

В идеале я хотел бы указать список скриптов и список зависимостей, и программа установит их автоматически.

2 ответа

Возможно, лучший способ справиться с этим будет использовать make с Makefile ( https://www.gnu.org/software/make/).

Distlib через файл setup.py поможет вам сделать его более читаемым, дав имена некоторым скриптам на python. И вы могли бы использовать make Система цели / зависимостей для последовательного выполнения задач.

Если вы хотите придерживаться Python, вы также можете использовать Луиджи ( https://luigi.readthedocs.io/en/stable/), но здесь это кажется излишним.

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

from installtools import setup

scripts = ['create_database.py', 'run_migrations.py']

setup("Shelob", "requirements.txt", scripts)

Полный сценарий можно найти здесь: https://gist.github.com/fdemian/808c2b95b4521cd87268235e133c563f

Поскольку PIP не имеет общедоступного API( и вряд ли будет иметь его в ближайшем будущем), сценарий использует API подпроцесса для вызова:

pip install -r [needs_file_path]

После этого он вызывает указанные скрипты Python, один за другим. Хотя он, вероятно, не очень надежен, в качестве временного решения он, похоже, делает свое дело.

Другие вопросы по тегам