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 ?
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 deb
name__, 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 root
name__, 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 preinst
name__) 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 debian
name__, par opposition au paquet binaire), et seraient exécutées lorsque vous émettriez debuild
ou 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 dpkg
name __/apt
a é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 apt
pour 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 apt
ou 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 stdeb
name__.
Et de nombreuses références utiles:
Besoin d'aide pour? Vérifiez ceux-ci:
Il y a pypi2deb
pour obtenir un paquet de pypi et en faire un paquet deb.
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 .
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