2012-02-07 21 views
8

Pracuję nad upakowaniem niektórych bibliotek w deb z pomocą distutils.Wdrażanie modułów Pythona w systemie Ubuntu z distutils i deb

Przypuszczalnie, Muszę mieć prawidłowo skonfigurowany plik setup.py, a także odpowiednie pliki /debian dla deb.

Teraz repozytorium wygląda mniej więcej tak:

library_name/ 
__init__.py 
liba.py 
libb.py 
... 

To jest dodany jako zależność do innych programów, aby mogli wykonać from library_name import liba.

Googling ujawnia coś między 3 a 5 różnymi metodami wdrażania na Ubuntu, nie uwzględniając podejścia easy_install; dokumentacja wydaje się być w dużej mierze w kawałkach i nieaktualna.

Szczególnie staram się zapewnić, że niezależnie od wersji Pythona, biblioteka zostanie umieszczona we właściwym katalogu systemowym. Oczywiście, że można go odinstalować lub zaktualizować bezproblemowo.

Endgame ma mieć deb na serwerze lokalnym, który jest dodawany jako zależność od pakietów dla naszych innych programów.

Co to jest kanoniczny "łatwy i bezpośredni" sposób, aby to zrobić?

+0

Czy twój pakiet jest kompatybilny z wersjami 2.x i 3.x? To znaczy, czy celujesz w oba? – nfirvine

+0

@nfirvine: 2,6 + 2,7 –

Odpowiedz

2

Możesz użyć pkgme, aby szybko utworzyć pliki debian. O ile mi wiadomo, w przeciwieństwie do innych podobnych narzędzi, takich jak dh-make, pkgme projekt jest oparty na wtyczkach, co oznacza, że ​​po wykryciu Pythona informacje z twojego pliku setup.py są poprawnie wyodrębniane.

Aby uzyskać więcej informacji, możesz zapoznać się z tym recent talk na wydarzenie Ubuntu Developer Week.

2

Przedtem też walczyłem z pakietem Python dla Ubuntu/Debian i zgadzam się, że dokumenty są nieporządne/nieistniejące/wprowadzające w błąd: naprawdę potrzebują krótkiego przewodnika w najprostszej możliwej sytuacji.

Cóż, oto jest!

Zainstaluj narzędzia. To może być przesadą, choć:

sudo apt-get install build-essential python-all dh-make devscripts fakeroot 

start z kodem wyrejestrowany w katalogu o nazwie $packagename-$version, jak library_name-0.6.0/ i cd do tego katalogu. Uruchom coś w stylu dh_make -i -c gpl3 -e [email protected] (patrz dh_make --help, aby uzyskać informacje na temat innych opcji). Jeśli wszystko pójdzie dobrze, nie dostaniesz żadnych błędów, a utworzy ładunek plików w ./debian. Możesz zignorować lub usunąć ./debian/*.{ex,EX}; to tylko przykłady.

Powinieneś raczej badać wszystkie te pliki w pewnym momencie, ale przynajmniej, ty potrzeba edytować ./debian/control i ./debian/rules. Powinieneś wypełnić wszystkie pola kontrolne, a mianowicie Description i Homepage.Zmienić linię Package do python-$libname zmienić linię Depends w control do tego:

Depends: ${misc:Depends}, ${python:Depends} 

To gwarantuje, że nasz pakiet binarny python-$libname zależy od wersji Pythona potrzebuje. (${python:Depends} is a "substvar"; they're created when we build; you can inspect their values after your first build in./Debian/$ packagename.substvars`.)

dokonać korekty w rules z dh [email protected] do dh [email protected] --with python2 konserwujące kartę z przodu (to jest Makefile). To powoduje, że debhelper używa swojego dodatku python2; domyślnie nadal używasz pysupport (który jest przestarzały, pamiętasz?).

Następnie uruchom następujące polecenia w katalogu źródłowym:

debuild -us -uc 

To buduje pakiet, bez podpisania (coś powinny dowiedzieć się, jak to zrobić później!). Powinieneś zobaczyć kilka znanych narzędzi setuptools (dwa razy: raz na 2.6, raz na 2.7), stosy dh_ addonów i inne budowanie cruft. Na końcu jest wyjście lintian, które może wykryć niektóre typowe problemy z pakowaniem; powinieneś to naprawić. Wiele rzeczy, na które licyni i znajomi narzekają, to tylko przestrzeganie zasad pakowania, a jeśli Twoja wewnętrzna libacja jest po prostu wewnętrzna, możesz ją rozegrać luźno.

Przy okazji, This page talks about the deprecation of python-support and python-central

Powiązane problemy