2017-02-12 8 views
2

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

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

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

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

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

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

+1

Возможно, вы захотите прочитать: http://stackoverflow.com/questions/17806485/execute-a-python-script-post-install-using-distutils-setuptools, https://github.com/lupien/pyHegel /blob/master/setup.py – fedepad

ответ

1

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

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

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

0

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

from installtools import setup 

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

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

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

Поскольку PIP не имеет публичный API (and isn't likely to have one in the near future) скрипт использует подпроцесс API для вызова :

пункт установить -r [requirements_file_path]

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

Смежные вопросы