Comment empaqueter une application Python pour la rendre installable par pip?

95

J'écris une application django pendant mon temps libre pour une compétition de footing que nous organisons au travail. J'ai pensé que j'utiliserais ce temps à bon escient et que je me mettrais au courant de virtualenv, pip, packaging, django 1.3, et comment écrire une application facilement redistribuable. Jusqu'ici tout va bien.

Je suis à la hauteur de la partie emballage. De nombreuses applications django sur GitHub, par exemple, sont pour la plupart regroupées (à peu près) de la même manière. J'utiliserai django-uni-forms comme exemple.

Une hypothèse que je fais est que les MANIFEST.inet setup.pysont les seules pièces nécessaires dont pip a besoin pour faire son travail. Est-ce exact? Quels autres composants sont nécessaires si mon hypothèse est fausse?

Les fichiers d'emballage requis sont-ils généralement générés ou sont-ils fabriqués à la main? Les dépendances peuvent-elles être décrites puis installées également? Mon application dépend de django-uni-forms, et je l'ai répertoriée dans un requirements.txtfichier de mon application que j'ai utilisé pour installer la dépendance; mais est-ce quelque chose que le système d'emballage peut prendre en charge?

Quelles sont les étapes à suivre pour empaqueter mon application de manière à ce que pip puisse l'installer ainsi que toutes les dépendances?

Josh Smeaton
la source

Réponses:

88

Oui, MANIFEST.inet setup.pydevrait être suffisant.

Ce billet de blog contient vraiment de bonnes informations sur ce sujet: Empaquetage d'une application réutilisable Django

Et voici un autre bon aperçu détaillé qui m'a beaucoup aidé: Python Packaging User Guide

En particulier, les conseils pour inclure vos fichiers statiques (modèles) sont importants car cela peut ne pas être évident au début.

Et oui, vous pouvez spécifier les packages requis dans votre setup.pyqui sont automatiquement récupérés lors de l'installation de votre application.

Par exemple:

    install_requires = [
        'django-profiles',
        'django-uni-forms',
    ],

Évidemment, nous avons maintenant deux endroits où les dépendances sont définies, mais cela ne signifie pas nécessairement que ces informations sont dupliquées: setup.py vs requirements.txt

Avec cette configuration, votre package devrait être installable via pip.


Comme Pierre l'a noté dans les commentaires, il y a maintenant une section pertinente dans la documentation officielle de Django: Empaqueter votre application

Et puis il y a ce guide "complètement incomplet", qui donne vraiment un bon aperçu de l'emballage et du téléchargement d'un paquet sur PyPI: Sharing Your Labour of Love: PyPI Quick And Dirty

arie
la source
4
Il y a aussi maintenant une partie expliquant comment empaqueter une application Django dans la documentation officielle
Pierre de LESPINAY