Як пакет Debian може встановлювати модулі Python з PyPI


20

Це питання намагається доповнити це . У мене є додаток python, який використовує сторонні модулі від PyPI. Я хочу упакувати свою програму в пакет debian, але не знаю, як обробляти залежності python, яких немає в сховищах debian / ubuntu (також упаковано як пакети debian)

Рішення №1:
вбудуйте модулі з PyPI прямо в мій пакунок debian.

Рішення №2:
створити пакети debian для всіх модулів PyPI, які мені потрібні, за допомогою stdeb та додати їх до сховищ debian / ubuntu.

Мені справді потрібне рішення №3, оскільки я хочу встановити залежності PyPI, коли встановлюю пакунок debian, бажано у virtualenv!

Що було б рішення №3 ? Чи потрібно налаштовувати сценарій підтримки DEBIAN / preinst ?


Чи можете ви описати, чому потрібно створити пакет Debian? Чи потрібні вашій програмі Python ресурси, що не належать до Python?
Джонатан

@Jonathan Я хочу, щоб користувачі могли встановити мій додаток із програмного центру Ubuntu. Я думаю, що мені потрібен * .deb для цього. Моєму додатку Python не потрібні ресурси, що не належать до Python, а лише сторонні модулі python.
andri_ch

Пакети @Jonathan Debian - це стандартний метод установки в Ubuntu. Можна легко поширити .debфайл, налаштувати приватне сховище або PPA на Launchpad.
MestreLion

Відповіді:


20

Я розмовляв з деякими технічними працівниками на Debian IRC-каналі irc: //irc.debian.org#debian-mentors , запитуючи про те саме, і загальний консенсус був:

Рішення №1:

Інтеграція залежностей у ваш пакет, копіюючи їх вихідні файли у єдину базу коду, дуже нахмуриться. Це перешкоджатиме призначенню системи упаковки, яка обробляє залежності, оновлення, версії тощо.

Рішення №3:

Завантаження недебіанських пакетів під час встановлення бінарного файлу ( .deb) є серйозним ризиком для безпеки, безумовно - ні-ні. Ви навіть не зможете перевірити залежності, витягнувши deb, оскільки вони завантажуються та встановлюються під час встановлення. Це підхід, який повністю обходить систему сховищ. Жоден зацікавлений користувач не буде задоволений пакетом, який за лаштунками (і як root, пам’ятайте!) Завантажує додаткове ненадійне програмне забезпечення з недовірених джерел. Так, це потребує спільного використання DEBIAN/postinst(або preinst) та видачі wget(або, у вашому випадку,pip install), і такий підхід застосовують Flash, Oracle Java, Steam та інші. Але це власне програмне забезпечення із закритим кодом, тому їхня безпека все одно не є.

Рішення №1.5:

Ви не згадали, але ви могли б інтегрувати залежності тільки на час збирання , тобто в початковому пакетом ( .orig.tar.gz, .debian.tar.gz, .dscтріади), скачавши з PyPi при створенні «двійковий» пакет (в .deb). Інструкції для pip installпішов би в debian/rules(зверніть увагу на нижній регістр debian, на відміну від бінарного пакета), і буде виконуватися , коли ви видаєте debuildчи dpkg-buildpackage.

Це середина між №1 та №3. Це пом'якшує (але не вирішує!) Деякі питання №3: принаймні, ви можете оглянути кінцевий продукт, і це .debне вимагатиме доступу до Інтернету під час встановлення. Усі ризики та тягарі передаються від кінцевого користувача до сервісного пакета. Але має ті ж проблеми, що і №1, оскільки вона обходить більшу частину інфраструктури пакувальної системи. Afterall, обробки залежностей (версії, оновлення, вимога, конфлікти) ось чому dpkg/ aptбули створено в першу чергу! :)

Рішення №2:

Єдиний Правдивий Правильний шлях ™ . Ви створюєте пакети debian для своїх залежностей, перераховуєте їх як вимоги у своєму пакеті та відправляєте всі .debsабо вихідні пакети.

Звідти у вас є ряд варіантів:

  • Подайте вихідні пакети, як ваше програмне забезпечення, так і його залежності, для включення в Debian. Якщо це буде прийнято, вони будуть автоматично доступні для всіх користувачів Debian, включаючи всі похідні, такі як Ubuntu.

  • Завантажте вихідні пакети на Launchpad , створивши таким чином PPA, який будь-який користувач Ubuntu (та його похідні, такі як Linux Mint) могли легко додавати та встановлювати

  • Розмістіть власний сховище debian на своєму веб-сайті, щоб користувачі з будь-якої системи, що базується на Debian, могли додавати до них /etc/apt/sources.list.dта використовувати aptінфраструктуру для завантаження, встановлення та постійного оновлення (як вище!)

  • Розмістіть .debфайли для прямого завантаження та встановлення. Ніяких aptабо автоматичних оновлень, пов'язаних думкою

Що ж стосується , як упакувати ваші залежності PyPi (! І програмне забезпечення пітон теж), існує цілий ряд інструментів і посилань , які роблять процес легко:

  • stdeb , як ви згадали. Олді та добрі.

  • Pybuild , новий дивовижний інструмент від Debian, який витісняє stdeb.

І багато корисних посилань:

Потрібна допомога? Перевірте це:



2

Є, pypi2debщоб отримати пакет від pypi і перетворити його в деб-пакет.


0

Вони не так, як cpan в perl, якщо у вас є в сховищах, ви можете встановити за допомогою apt-get, якщо ні, ви можете встановити за допомогою pip, різниця повинна полягати в тому, що встановити pip в / usr / local.

Щоб встановити за допомогою pip, ви можете:

apt-get install python-pip 
pip install foopackage 

наприклад:

pip install MultipartPostHandler2

Це не відповідає на питання ОП. Питання полягає в тому, як змусити пакет Debian встановити пакет Python з PyPi, щоб "apt-get <custom-package>" або "dpkg -i <custom-package>" потягнув би python-залежність від PyPi.
SevakPrime

Вони ні, це як cpan в perl, якщо у вас є сховища, ви можете встановити за допомогою apt-get, якщо не ви можете встановити з pip, різниця повинна полягати в тому, що встановити pip в / usr / local, але, можливо, він буде краще видаліть мою відповідь.
Серхіо

Ваш коментар дає відповідну відповідь на питання ОП. Ви повинні залишити цей коментар у своїй відповіді, щоб його було проголосовано. (Наприклад, див. Відповідь MestreLion.) Як і ваша відповідь, не відповідає на питання ОП.
SevakPrime
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.