Est-il un moyen standard pour créer des paquets Debian pour la distribution de Python programmes?
Il y a une tonne d'informations sur la façon de le faire, mais depuis "il n'y a plus d'une façon à la peau d'un chat", et tous les tutos/guides qui couvrent un peu les processus semblent faire certaines hypothèses qui sont différents des autres tutoriels, je ne l'ai toujours pas réussi à la saisir.
Jusqu'à présent c'est ce que je crois que j'ai compris.
- Mon objectif final devrait être celui de la création d'un "binaire" .paquet deb. Ce dernier pourra être indépendant de la plateforme (32/64 bits), tous les programmes Python sont de telles.
- Pour créer un "binaire" paquet j'ai besoin d'abord de créer un paquet source.
- Pour créer le paquet source, je peux utiliser
CDBS
oudebhelper
. Debhelper est le moyen recommandé pour les débutants. - La base de la création d'un paquet source est le remplissage de la
DEBIAN
répertoire dans le répertoire source avec un certain nombre de fichiers de préciser les endroits où les fichiers doivent être copiés, ce que le droit d'auteur et le régime d'autorisation ils sont soumis, les dépendances de la ils ont, etc... - Étape #4 peut être largement automatisé de la
dh_make
commande si la source Python est également livré avec un distutils'setup.py
script.
Maintenant mes questions:
- Est ma compréhension du processus? Est-ce que je suis absent, ou quoi que ce soit que j'ai eu tort?
- Étape #5 est vraiment la plus déroutante pour moi: plus précisément, les deux points qui reste le plus obscur pour moi sont:
- Comment puis-je écrire un
setup.py
script installer un stand-alone programme? EDIT: Par programme autonome je veux dire un programme destiné à être utilisé par un utilisateur de bureau (par opposition à une module que je comprends comme une collection de fonctionnalités pour être utilisé par d'autres logiciels après avoir été importés). Dans mon cas précis je voudrais réellement besoin deux ces "programmes": le logiciel principal et un autre utilitaire (en effet un deuxième "programme" qui devrait être dans le même package avec l'autre). - Quelles sont les spécificités d'un script pour les paquets DEB? La documentation officielle ne semble traiter avec les RPM et Windows trucs...
- Comment puis-je écrire un
BTW: Ces sont les meilleures sources d'information que j'ai pu trouver moi-même jusqu'à présent. Si vous avez quelque chose de mieux que cela, s'il vous plaît partager! 🙂
- Ubuntu Python emballage guide de l'
- La création d'un .paquet deb à partir d'un python setup.py (il montre les étapes, mais il n'a pas expliquer assez pour que je puisse suivre)
- ShowMeDo vidéo sur "créer un .paquet deb d'un python
programme" (il ne semble pas à jour et si j'ai bien compris - va produire des paquets pour un usage personnel, sans dépendances
et sans un signé changelog et d'autres données clés qui la rendent incompatible avec la charte Debian).
- Avant de vous peut préparer un programme en python pour les paquets binaires, vous devez la préparer pour une distribution générale. C'est le
setup.py
peu. Ceci est comparable à laautotools
étape de nombreux GNU C/C++ par les projets, mais spécifique à python. C'est plus facile qu'il n'y paraît, lire docs.python.org/distutils/index.html - Merci, j'ai déjà eu l'idée générale (ma formulation est peut-être incorrect, mais c'est la partie 5 de la procédure que je décris). Ce qui est déroutant pour moi, c'est que dans la documentation officielle, je ne pouvais pas trouver explicitement un how-to sur la façon de distribuer programmes autonomes plutôt que de modules. Peut-être que c'est juste un problème de terminologie et de ce que j'appelle la "autonomes" sont un type spécifique de modules?
- Vous pouvez installer des scripts, c'est à dire les fichiers exécutables pour démarrer votre programme. Voir docs.python.org/distutils/setupscript.html#installing-scripts
- J'ai lu qu'avant, mais je suis encore confus: mon programme a un
main.py
fichier (je suppose que vous pourriez l'appeler "script") ET une série de modules ET de certaines autres DONNÉES et fichiers SVG... je suis toujours des difficultés à trouver une documentation claire sur la manière d'y parvenir. Le meilleur que j'ai pu trouver jusqu'à présent est la distutils tutoriel ce qui me reste à étudier... - Par programme autonome voulez-vous dire quelque chose qui n'aura pas de python comme une dépendance? Les dernières versions de Debian et Ubuntu viennent tous deux avec au moins la version 2.6 de python, donc si vous code est de 2,6 compatible, un "programme autonome" peut en fait être juste un cas particulier d'un module, comme vous l'avez suggéré.
- Merci pour repérer l'ambiguïté de ma terminologie, j'ai essayé de clarifier par l'édition de l'original de la question ci-dessus.
- Faire un petit python/script shell qui lance votre programme. Cela pourrait être aussi simple que de
python /path/to/program.py
. Le rendre exécutable et de le mettre quelque part, comme/usr/local/bin
. Cela devrait être suffisant pour obtenir le comportement que vous voulez. - Oui, tout cela devrait être possible. Votre main.py est un script, vos autres fichiers Python sont probablement un paquet (ou plusieurs paquets). Le YAML et fichiers SVG sont soit forfait de données ou de fichiers de données.
- Je pense que ce que vous voulez faire est quelque chose de commun dans Debian, mais pas pris en charge nativement par distutils: Avoir une application composée de modules et un coureur de script, sans avoir les modules installés et rendu public en site-packages. Gajim par exemple n'est que par l'installation des modules dans /usr/share/gajim et l'édition de sys.chemin dans le script runner.
- Il semble que Ubuntu référence a déplacé et est maintenant "obsolète". Mais je n'ai pas détecter une explication des raisons pour lesquelles il est considéré comme obsolète.
- double possible de Comment dois-je faire Debian emballage d'un paquet Python?
Vous devez vous connecter pour publier un commentaire.
Il ressemble stdeb faire ce que vous souhaitez.
Aussi, pour l'installation de scripts, je recommande fortement distribuer du console_scripts point d'entrée de soutien.
DEBIAN/control
. Est-il un moyen de fairestdeb
l'utiliser?Cet article de Barry Varsovie m'a aidé à en arriver assez loin dans le processus. J'ai toujours eu à faire beaucoup de recherche sur le côté, bien que, et j'ai lu la plupart de la Ubuntu packaging guide un certain temps dans le passé.
Avoir une bonne
setup.py
est un très bon conseil. J'ai trouvé ces deux guides très bon:Le droit chemin de la construction d'un paquet deb est à l'aide de
dpkg-buildpackage
, mais il est parfois un peu compliqué. Au lieu de cela, vous pouvez utiliserdpkg -b <folder>
, et il permettra de créer votre paquet Debian.Ce sont les bases pour la création d'un paquet Debian avec
dpkg -b <folder>
avec les binaires ou avec n'importe quel type de script qui s'exécute automatiquement sans avoir besoin de compilation manuel (Python, Bash, Perl et Ruby):De créer les fichiers et dossiers afin de recréer la structure suivante:
Les scripts mis à
/usr/bin/
sont appelées directement à partir de la borne, notez que je n'ai pas ajouter une extension pour le script. Vous pouvez aussi remarquer que la structure du paquet deb sera la structure du programme une fois qu'il est installé. Donc, si vous suivez cette logique, si votre programme a un fichier unique, vous pouvez directement placer sousProgramName-Version/usr/bin/your_script
, mais si vous avez plusieurs fichiers, vous devez les placer sousProgramName-Version/usr/share/ProgramName/all your files
et place d'un seul fichier sous/usr/bin/
qui va appeler vos scripts de/usr/share/ProgramName/
Changer toutes les permissions de dossier à la racine:
Modifier le script autorisations d':
Enfin, vous pouvez exécuter:
dpkg -b /path/to/the/ProgramName-Version
et votre paquet deb sera créé! (Vous pouvez également ajouter un post/pré inst scripts et tout ce que vous voulez, il fonctionne comme un simple paquet Debian)Voici un exemple de la
control
fichier. Il suffit de copier-coller dans un fichier vide appelé "contrôle" et de le mettre dans le dossier DEBIAN.Il y a plusieurs bibliothèques qui abstraction de toutes les étapes nécessaires et vous permettent de transformer votre paquet Python dans un paquet Debian à partir d'une seule commande.
En supposant que votre paquet python a déjà le
setup.py
, dans le répertoire oùsetup.py
est situé à, que vous pouvez utiliser:stdeb (Déjà mentionné dans ce réponse, installer avec
pip install stdeb
). Pour créer un paquet Debian, lancez:La sortie
.deb
fichier se trouve dans lebdist_deb
répertoire.fpm (installer avec
gem install --no-ri --no-rdoc fpm
). Pour créer un paquet Debian, lancez:py2deb (installer avec
pip install py2deb
). Pour créer un paquet Debian, lancez:Chacune de ces bibliothèques a ses propres mises en garde, de sorte que vous pourriez vouloir essayer ce qui fonctionne le mieux pour vous.
Cette méthode fonctionne pour moi.
installer stdeb. (pip install stdeb)
créer setup.py. Je suis l'aide de PyCharm. Ce sera (https://www.jetbrains.com/help/pycharm/creating-and-running-setup-py.html)
écrire ces commandes dans votre répertoire de projet.