web-dev-qa-db-fra.com

Comment un paquet Debian peut-il installer Python modules depuis PyPI

Cette question tente de compléter celle-ci . J'ai une application python qui utilise des modules tiers de PyPI. Je souhaite créer un package debian pour mon application, mais je ne sais pas comment gérer les dépendances python qui ne figurent pas dans les référentiels debian/ubuntu (emballés également dans les packages debian)

Solution n ° 1:
construisez les modules de PyPI directement dans mon paquet Debian.

Solution n ° 2:
crée des paquets debian pour tous les modules PyPI dont j’ai besoin en utilisant stdeb et les ajoute aux référentiels debian/ubuntu.

J'ai en fait besoin d'une solution # 3 car je souhaite installer des dépendances PyPI lors de l'installation de mon paquet debian, de préférence dans un virtualenv!

Quelle serait la solution n ° 3 ? Dois-je modifier le script de responsable DEBIAN/preinst ?

18
andri_ch

J'ai parlé à certains responsables du canal IRC de Debian irc: //irc.debian.org#debian-mentors , demandant exactement la même chose et le consensus général était:

Solution n ° 1:

Intégrer les dépendances dans votre paquet en copiant leurs fichiers source sur une seule base de code est très mal vu. Cela irait à l'encontre de l'objectif d'un système de packaging qui gère les dépendances, les mises à jour, les versions, etc.

Solution n ° 3:

Télécharger des paquets non-Debian à la volée lors de l’installation d’un binaire (.deb) est un risque de sécurité sérieux, certainement un non-non. Vous ne seriez même pas capable de inspecter les dépendances en extrayant le debname__, car elles sont téléchargées et installées au moment de l'installation. C'est une approche qui contourne complètement le système de référentiels. Aucun utilisateur concerné ne serait satisfait d'un package qui, dans les coulisses (et comme rootname__, rappelez-vous!), Télécharge des logiciels supplémentaires non fiables à partir de sources non fiables. Oui, cela nécessiterait de manipuler DEBIAN/postinst (ou preinstname__) et d’émettre un wget(ou, dans votre cas, pip install), et c’est l’approche adoptée par Flash, Oracle Java, Steam et autres. Mais il s’agit d’un logiciel propriétaire à source fermée, de sorte que leur sécurité n’en est pas une.

Solution n ° 1.5:

Vous n'en avez pas parlé, mais vous ne pouviez intégrer les dépendances que dans compilation, c'est-à-dire dans le package source (le .orig.tar.gz, .debian.tar.gz, .dsc triad), en téléchargeant depuis PyPi lors de la création du paquetage "binaire" (le .deb). Les instructions pour le pip install seraient insérées dans debian/rules (notez le nom minuscule debianname__, par opposition au paquet binaire), et seraient exécutées lorsque vous émettriez debuildou dpkg-buildpackage.

Il s’agit d’un compromis entre les positions n ° 1 et n ° 3. Cela atténue (mais ne résout pas!) Certains des problèmes de # 3: vous pouvez au moins inspecter le produit final et le .deb ne nécessitera pas d'accès Internet au moment de l'installation. Tous les risques et charges sont transférés de l'utilisateur final au mainteneur du paquet. Mais, a les mêmes problèmes que le n ° 1, car il contourne la plupart des infrastructures de système d’emballage. Après tout, la gestion des dépendances (versions, mises à jour, conditions requises, conflits) est la raison pour laquelle dpkgname __/apta été créé! :)

Solution n ° 2:

Le One True Right Way ™. Vous créez des paquets Debian pour vos dépendances, les répertoriez comme exigences dans votre paquet et expédiez tous les paquets .debs ou source.

A partir de là, vous avez plusieurs options:

  • Submit les paquets sources, à la fois votre logiciel et ses dépendances, pour inclusion dans Debian. S'ils sont acceptés, ils seront automatiquement disponibles pour tous les utilisateurs Debian, y compris tous les dérivés tels que Ubuntu.

  • Téléchargez les paquets sources sur Launchpad , créant ainsi un PPA que tout utilisateur Ubuntu (et ses dérivés comme Linux Mint) pourrait facilement ajouter et installer.

  • Hébergez votre propre référentiel Debian sur votre site Web, que les utilisateurs de tout système Debian pourraient ajouter à leur /etc/apt/sources.list.d et utiliser l'infrastructure aptpour télécharger, installer et rester à jour (comme ci-dessus!).

  • Hébergez les fichiers .deb pour les télécharger et les installer directement. Pas de aptou mises à jour automatiques impliqués pensé.

En ce qui concerne comment ​​pour conditionner vos dépendances PyPi (ainsi que votre logiciel python!), Il existe un certain nombre d'outils et de références qui facilitent le processus:

  • stdeb , comme vous l'avez mentionné. Oldie et goodie.

  • Pybuild , un nouvel outil étonnant de Debian qui remplace stdebname__.

Et de nombreuses références utiles:

Besoin d'aide pour? Vérifiez ceux-ci:

19
MestreLion

Il y a pypi2deb pour obtenir un paquet de pypi et en faire un paquet deb.

2
LtWorf

Je pense que vous devez simplement ajouter le code de ligne de commande approprié au script postinst du package .deb. Trouvé dans cette réponse , plus de détails à la guide officiel de Debian .

2
TheSchwa

Ce n’est pas le cas, c’est comme cpan dans Perl, si vous avez des dépôts, vous pouvez installer avec apt-get, sinon vous pouvez installer avec pip, la différence devrait être l’installation de pip dans/usr/local.

Pour installer avec pip vous pouvez faire:

apt-get install python-pip 
pip install foopackage 

par exemple:

pip install MultipartPostHandler2
0
Sérgio