Пользователь
0,0
рейтинг
2 декабря 2013 в 16:18

Разработка → Отправка python пакетов в ppa без «жизнь боль»

После поста про смотрелку сериалов пришло пожелание добавить subliminal для загрузки субтитров. Увидев его зависимости, из которых в репозитории присутствуют только два пакета, и то не подходящих версий. Я понял, что жизнь боль и мне придётся создать пять debian/control, сделать пять changelog'ов и создать 20 тасков в jenkins.

Но зачем тратить на всё это целых два часа, если можно потратить всего несколько дней на автоматизацию этого процесса. В результате появился pytoppa, он:
  • формирует changelog из истории между изменениями version в setup.py;
  • автоматически добавляет обязательные зависимости;
  • имеет простой конфиг в yaml.


Установка


Ubuntu


В ubuntu пакет можно поставить из ppa:
sudo add-apt-repository ppa:nvbn-rm/ppa
sudo apt-get update
sudo apt-get install pytoppa

Другие дистрибутивы


Нужно вручную установить dh-make и cdbs, а после этого поставить pytoppa через pip:
pip install pytoppa

Использование


В корне репозитория с проектом нужно создать .pytoppa.yml, его формат:
section: секция  # по умолчанию python, можно не указывать
dependencies:
 - зависимость-1
 - зависимость-2
releases:
 - релиз-1
 - релиз-2

Например, для приложения series_list:
section: net
dependencies:
  - python-requests
  - python-beautifulsoup
  - python-gevent
  - python-decorator
  - python-libtorrent
  - python-pyside
  - subliminal
releases:
  - saucy
  - precise
  - quantal
  - raring


И запустить:
pytoppa ключ-зарегистрированный-на-launchpad ppa

Например, я запускаю:
pytoppa 'Vladimir Iakovlev <nvbn.rm@gmail.com>' 'ppa:nvbn-rm/ppa'

Как оно работает


Немного нетривиальным оказалось считывание параметров из setup.py. Самым простым способом оказалось заменить setuptools.setup и distutils.core.setup на свой метод, просто сохраняющий параметры.

И формирование changelog, для него пришлось:
  1. получить все коммиты, в которых присутствует setup.py;
  2. для каждого из коммитов скопировать репозиторий во временную папку и переключиться на коммит. Изначально приложение проходило только по коммитам, где менялся setup.py, но часто версия импортируется из другого файла;
  3. считать версию из setup.py;
  4. взять изменения из лога коммитов между разными версиями.

На остальных этапах происходит просто копирование или запуск команд.

Ссылки


github проекта;
ppa с проектом.
Яковлев Владимир @nvbn
карма
73,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (11)

  • 0
    Всё это круто, но, надеюсь, Вы понимаете, что обычно такие пакеты весьма далеки от того, что нужно по полиси. Хотя бы невалидным debian/copyright. Так что лучше потратить дополнительное время, причесать пакеты, пропихнуть их в Debian, а потом наслаждаться.
    • +1
      Да, конечно, это способ для тех случаев, когда нужно просто быстро добавить свежую версию пакета в ppa.
      • +2
        Кстати, нет желания майнтейнить эти пакеты в Debian? Могу проспонсировать ;)
        • 0
          Связанное с этим проектом пока нет, он ещё в активной разработке, а вот everpad можно было бы =)
          • 0
            В любом случае, если захотите — обращайтесь. Поменторю и поспонсорю :)
    • 0
      Так что лучше потратить дополнительное время, причесать пакеты, пропихнуть их в Debian, а потом наслаждаться.

      Ещё нужна машина времени. Чтобы пропихнуть пакеты в текущую версию debian нужна машина времени, иначе только в версию которая будет стабильной через пару лет.
      • 0
        В текущую версию ничего пропихивать не надо. Пропихивать надо в unstable (откуда, кстати, убунта потом подтягивает пакеты).
  • +2
    Но зачем тратить на всё это целых два часа, если можно потратить всего несколько дней на автоматизацию этого процесса.
    Вот оно, описание всей сути программирования.
    А по теме, спасибо! Программа может оказаться очень полезной в определенных ситуациях.
  • +1
    dependencies:
    — python-requests
    — python-beautifulsoup
    — python-requests

    requests дважды?
    • 0
      Спасибо, поправил.
  • 0
    Разделяю вашу боль =) сам в таких случаях пользовался py2dsc. Удобно тем, что генерит исходники для пакета, в которых можно вручную что-то поправить перед тем, как сделать debuild.

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