web-dev-qa-db-fra.com

Comment empaqueter une application python pour la rendre pip-installable?

J'écris une application Django dans mon temps libre pour un concours de footy-tip que nous organisons au travail. Je me suis dit que j'utiliserais ce temps à bon escient et me mettrais à jour sur virtualenv , pip, packaging, Django 1.3, et comment écrire une application facilement redistribuable. Jusqu'à présent, tout va bien.

Je suis à la partie emballage. Un grand nombre des 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 le MANIFEST.in et setup.py sont les seules pièces requises 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? Ma candidature dépend de Django-uni-forms, et je l'ai répertorié dans un requirements.txt fichier dans mon application que j'ai utilisé pour installer la dépendance; mais est-ce quelque chose dont le système d'emballage peut s'occuper?

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

95
Josh Smeaton

Oui, MANIFEST.in et setup.py devrait être suffisant.

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

Et voici un autre bon aperçu détaillé qui m'a beaucoup aidé: Guide d'utilisation de l'emballage Python

Les conseils pour obtenir vos fichiers statiques (modèles) sont particulièrement importants, car cela peut ne pas être évident au premier abord.

Et oui, vous pouvez spécifier les packages requis dans votre setup.py qui sont récupérés automatiquement 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 excellent aperçu de l'emballage et du téléchargement d'un package sur PyPI: Partager votre travail d'amour: PyPI rapide et sale

88
arie