Wie packe ich eine Python-Anwendung, um sie pip-installierbar zu machen?

95

In meiner Freizeit schreibe ich eine Django-Bewerbung für einen Footy-Tipping-Wettbewerb, den wir bei der Arbeit durchführen. Ich dachte, ich würde diese Zeit mit Bedacht nutzen und mich mit Virtualenv, Pip, Packaging, Django 1.3 und dem Schreiben einer leicht umverteilbaren Anwendung vertraut machen. So weit, ist es gut.

Ich bin bis zum Verpackungsteil. Viele der Django-Apps auf GitHub werden zum Beispiel (ungefähr) auf die gleiche Weise gebündelt. Ich werde Django-Uni-Formulare als Beispiel verwenden.

Ich gehe davon aus, dass die MANIFEST.inund setup.pydie einzigen erforderlichen Teile sind, die Pip benötigt, um seine Arbeit zu erledigen. Ist das korrekt? Welche anderen Komponenten sind erforderlich, wenn meine Annahme falsch ist?

Werden die erforderlichen Verpackungsdateien in der Regel generiert oder von Hand gefertigt? Können Abhängigkeiten beschrieben und dann auch installiert werden? Meine Anwendung hängt davon ab django-uni-formsund ich habe sie in einer requirements.txtDatei in meiner App aufgelistet, mit der ich die Abhängigkeit installiert habe. Aber kann sich das Verpackungssystem darum kümmern?

Welche Schritte muss ich ausführen, um meine Anwendung so zu verpacken, dass pip sie und eventuelle Abhängigkeiten installieren kann?

Josh Smeaton
quelle

Antworten:

88

Ja MANIFEST.inund setup.pysollte ausreichen.

Dieser Blog-Beitrag enthält wirklich einige gute Informationen zu diesem Thema: Verpacken einer wiederverwendbaren Django-App

Und hier ist eine weitere gute, detaillierte Übersicht, die mir sehr geholfen hat: Python Packaging User Guide

Insbesondere die Tipps zum Einfügen Ihrer statischen Dateien (Vorlagen) sind wichtig, da dies zunächst möglicherweise nicht offensichtlich ist.

Und ja, Sie können in Ihrem Paket die erforderlichen Pakete angeben, die setup.pybei der Installation Ihrer App automatisch abgerufen werden.

Beispielsweise:

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

Natürlich haben wir jetzt zwei Stellen, an denen Abhängigkeiten definiert sind, aber das bedeutet nicht unbedingt, dass diese Informationen dupliziert werden: setup.py vs require.txt

Mit diesem Setup sollte Ihr Paket über installierbar sein pip.


Wie Pierre in den Kommentaren feststellte, gibt es jetzt auch einen relevanten Abschnitt in der offiziellen Dokumentation von Django: Verpacken Ihrer App

Und dann gibt es diesen "völlig unvollständigen" Leitfaden, der wirklich einen guten Überblick über das Verpacken und Hochladen eines Pakets auf PyPI gibt: Teilen Sie Ihre Liebesarbeit: PyPI Quick And Dirty

Arie
quelle
4
Außerdem gibt es jetzt einen Teil, in dem erklärt wird, wie eine Django-App in den offiziellen Dokumenten
verpackt wird