To pytanie próbuje uzupełnić to pytanie . Mam aplikację w języku Python, która korzysta z zewnętrznych modułów PyPI. Chcę spakować moją aplikację do pakietu debian, ale nie wiem, jak obsługiwać zależności Pythona, które nie znajdują się w repozytoriach debian / ubuntu (również pakowane jako pakiety debian)
Rozwiązanie 1:
Zbuduj moduły z PyPI bezpośrednio w moim pakiecie debian.
Rozwiązanie nr 2:
utwórz pakiety debian dla wszystkich modułów PyPI, których potrzebuję, używając stdeb i dodaj je do repozytoriów debian / ubuntu.
Potrzebuję rozwiązania nr 3, ponieważ chcę zainstalować zależności PyPI podczas instalowania mojego pakietu debian, najlepiej w virtualenv!
Jakie byłoby rozwiązanie nr 3 ? Czy muszę dostosować skrypt DEBIAN / preinst opiekun?
źródło
.deb
Launchpad można łatwo dystrybuować plik, konfigurować prywatne repozytorium lub PPA.Odpowiedzi:
Rozmawiałem z niektórymi opiekunami na kanale Debian IRC irc: //irc.debian.org#debian-mentors , prosząc o dokładnie to samo, a ogólny konsensus był następujący:
Rozwiązanie nr 1:
Integrowanie zależności w pakiecie poprzez kopiowanie ich plików źródłowych, ponieważ jedna baza kodów jest bardzo niezadowolona. Byłoby to sprzeczne z celem systemu pakowania, który obsługuje zależności, aktualizacje, wersjonowanie itp.
Rozwiązanie nr 3:
Pobieranie pakietów innych niż debian w locie podczas instalowania pliku binarnego (
.deb
) jest poważnym zagrożeniem dla bezpieczeństwa, zdecydowanie nie-nie. Nie byłoby nawet możliwe sprawdzenie zależności przez wyodrębnieniedeb
, ponieważ są one pobierane i instalowane w czasie instalacji. To podejście całkowicie omija system repozytoriów. Żaden zainteresowany użytkownik nie byłby zadowolony z pakietu, który za kulisami (i jakroot
pamiętaj!) Pobiera dodatkowe niezaufane oprogramowanie z niezaufanych źródeł. Tak, wymagałoby to majstrowania przyDEBIAN/postinst
(lubpreinst
) i wydaniawget
(lub, w twoim przypadku,pip install
), a takie podejście przyjęli Flash, Oracle Java, Steam i inni. Ale to zastrzeżone oprogramowanie z zamkniętym kodem źródłowym, więc ich bezpieczeństwo i tak nie ma.Rozwiązanie nr 1.5:
Nie wspominając, ale można zintegrować zależności tylko w czasie kompilacji , czyli w źródłowym pakietu (The
.orig.tar.gz
,.debian.tar.gz
,.dsc
triady), pobierając od PyPI podczas tworzenia „binarny” pakiet (z.deb
). Instrukcje dlapip install
pójdą dodebian/rules
(zwróć uwagę na małe literydebian
, w przeciwieństwie do pakietu binarnego) i zostaną wykonane po wydaniudebuild
lubdpkg-buildpackage
.Jest to środek między 1 a 3. Łagodzi (ale nie rozwiązuje!) Niektóre problemy z punktu 3: przynajmniej możesz sprawdzić produkt końcowy i
.deb
nie wymagałby on dostępu do Internetu w czasie instalacji. Wszystkie ryzyka i obciążenia są przenoszone z użytkownika końcowego na opiekuna pakietu. Ma jednak takie same problemy jak nr 1, ponieważ omija większość infrastruktury systemu pakowania. W końcu obsługa zależności (wersje, aktualizacje, wymagania, konflikty) jest powodem, dla któregodpkg
/apt
został stworzony! :)Rozwiązanie nr 2:
The One True Right Way ™ . Tworzysz pakiety Debiana dla swoich zależności, wymieniasz je jako wymagania w pakiecie i wysyłasz wszystkie
.debs
pakiety źródłowe lub źródłowe.Stamtąd masz wiele opcji:
Prześlij pakiety źródłowe, zarówno swoje oprogramowanie, jak i jego zależności, w celu włączenia do Debiana. Jeśli zostaną zaakceptowane, będą automatycznie dostępne dla wszystkich użytkowników Debiana, w tym dla wszystkich pochodnych, takich jak Ubuntu.
Prześlij pakiety źródłowe do Launchpada , tworząc w ten sposób PPA, który każdy użytkownik Ubuntu (i jego pochodne, takie jak Linux Mint) mógłby łatwo dodać i zainstalować
Hostuj własne repozytorium Debiana na swojej stronie internetowej, które użytkownicy z dowolnego systemu opartego na Debianie mogą dodawać do nich
/etc/apt/sources.list.d
i korzystać zapt
infrastruktury do pobierania, instalowania i aktualizowania (jak wyżej!)Hostuj
.deb
pliki do bezpośredniego pobrania i instalacji. Nieapt
dotyczyło to ani automatycznych aktualizacji.Jeśli chodzi o sposób pakowania zależności PyPi (a także oprogramowania Python!), Istnieje wiele narzędzi i referencji, które ułatwiają ten proces:
stdeb , jak wspomniałeś. Staruszek i skarbie.
Pybuild , nowe, niesamowite narzędzie Debiana, które zastępuje
stdeb
.I wiele przydatnych referencji:
Przewodnik po stylach pakowania bibliotek Pythona
Debian Python Policy
Potrzebuję pomocy? Sprawdź te:
Często zadawane pytania dotyczące mentorów Debiana
Zespół pakujący w Python
źródło
Myślę, że wystarczy dodać odpowiedni kod wiersza poleceń do skryptu postinst w pakiecie .deb. Znalezione w tej odpowiedzi , więcej szczegółów w oficjalnym przewodniku debiana .
źródło
Jest to,
pypi2deb
aby pobrać pakiet z pypi i przekształcić go w pakiet deb.źródło
Nie są, jest jak cpan w perlu, jeśli masz w repozytoriach, możesz zainstalować za pomocą apt-get, jeśli nie, możesz zainstalować za pomocą pip, różnica powinna polegać na tym, że pip instaluje się w / usr / local.
Aby zainstalować za pomocą pip, możesz:
na przykład:
źródło