Jak spakować aplikację w języku Python, aby umożliwić jej instalację za pomocą pip?

95

W wolnym czasie piszę aplikację django na zawody, które prowadzimy w pracy. Pomyślałem, że mądrze wykorzystam ten czas i przyspieszy pracę nad virtualenv, pip, pakietami, django 1.3 i jak napisać łatwą do redystrybucji aplikację. Na razie w porządku.

Jestem do części opakowania. Na przykład wiele aplikacji django na GitHub jest w większości pakowanych (z grubsza) w ten sam sposób. Użyję Django Uni-form jako przykład.

Założenie, że robię to, że MANIFEST.ini setup.pysą wymagane tylko kawałki, które potrzeby pip wykonywać swoje zadania. Czy to jest poprawne? Jakie inne składniki są potrzebne, jeśli moje założenie jest błędne?

Czy wymagane pliki z pakietami są generalnie generowane, czy też są tworzone ręcznie? Czy można opisać i zainstalować zależności? Moja aplikacja zależy od django-uni-formsi mam ją wymienioną w requirements.txtpliku w mojej aplikacji, którego użyłem do zainstalowania zależności; ale czy jest to coś, czym może zająć się system pakowania?

Jakie kroki muszę wykonać, aby spakować moją aplikację w taki sposób, aby pip mógł ją zainstalować i wszelkie zależności?

Josh Smeaton
źródło

Odpowiedzi:

88

Tak, MANIFEST.ini setup.pypowinno wystarczyć.

Ten wpis na blogu naprawdę zawiera dobre informacje na ten temat: Pakowanie aplikacji wielokrotnego użytku Django

A oto kolejny dobry, szczegółowy przegląd, który bardzo mi pomógł: Podręcznik użytkownika pakietu Python

Szczególnie ważne są wskazówki dotyczące dołączania plików statycznych (szablonów), ponieważ na początku może to nie być oczywiste.

I tak, możesz określić wymagane pakiety, setup.pyktóre są automatycznie pobierane podczas instalowania aplikacji.

Na przykład:

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

Oczywiście mamy teraz dwa miejsca, w których zdefiniowane są zależności, ale to niekoniecznie oznacza, że ​​te informacje są zduplikowane: setup.py vs Requirements.txt

W przypadku tej konfiguracji pakiet powinien być możliwy do zainstalowania za pośrednictwem pip.


Jak zauważył Pierre w komentarzach, w oficjalnej dokumentacji Django jest teraz również odpowiednia sekcja: Pakowanie aplikacji

Jest też ten „całkowicie niekompletny” przewodnik, który naprawdę daje świetny przegląd pakowania i przesyłania pakietu do PyPI: Sharing Your Labor of Love: PyPI Quick And Dirty

arie
źródło
4
Jest też teraz część wyjaśniająca, jak spakować aplikację Django w oficjalnej dokumentacji
Pierre de LESPINAY