Jak utworzyć pakiet deb dla pojedynczego skryptu python?


78

Mam pojedynczy skrypt Pythona, który chcę rozpowszechniać jako pakiet deb. Jest to wskaźnik pokazujący lokalną datę w panelu Unity. Po zakończeniu tworzenia skryptu lub plików binarnych utworzyłem pakiet .deb, ale nie mogłem utworzyć pakietu deb, ponieważ nie działa.

Czy ktoś może udzielić mi instrukcji krok po kroku, co powinienem zrobić? O ile wiem, ten skrypt zależy od python-appindicator.

UWAGA:
Nie chcę żadnych linków do instrukcji pakowania Debiana / Ubuntu. Widziałem większość z nich. Nie uważam ich za przyjaznych dla początkujących.


6
Chociaż instrukcje pakowania Debiana i Ubuntu nie są przyjazne dla początkujących (zaufaj mi, wiem), wiele aplikacji GUI, które tworzą dla ciebie debaty, po prostu ujawnia wiele błędów podczas uruchamiania końcowego sprawdzania pakietów, takiego jak lintian. Jeśli poważnie myślisz o pakowaniu, najlepiej jest spróbować i wykonać instrukcje zgodnie z instrukcją :)
Thomas Boxley,

Nie wiem o pakowaniu, ale funkcjonalność, którą próbujesz dodać, jest wbudowana w Unity.
To Willem,

Odpowiedzi:


84

Poniżej znajduje się podstawowy przykład tego, jak może wyglądać pakiet źródłowy skryptu python. Chociaż większość samouczków dotyczących pakowania jest nieco skomplikowana, mogą one naprawdę pomóc, jeśli napotkasz problem. To powiedziawszy, najpierw nauczyłem się podstaw pakietów Debiana, po prostu patrząc na pakiety Debiana. apt-get sourcecoś podobnego i ucz się na przykładzie.

Oto twój podstawowy układ pakietu źródłowego:

my-script/
    -- myScript
    -- debian/
        -- changelog
        -- copyright
        -- compat
        -- rules
        -- control
        -- install

Uruchom dch --createw katalogu, aby utworzyć poprawnie sformatowany debian/changelogwpis.

debian / copyright powinien wyglądać następująco:

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: myScript
Upstream-Contact: Name, <email@address>

Files: *
Copyright: 2011, Name, <email@address>
License: (GPL-2+ | LGPL-2 | GPL-3 | whatever)
 Full text of licence.
 .
 Unless there is a it can be found in /usr/share/common-licenses

debian / kompatybil może być po prostu:7

debian / rules :

#!/usr/bin/make -f

%:
    dh $@ --with python2

Pamiętaj, że wcześniej musi być „tab” dh $@ --with python2, a nie spacje.

debian / control :

Source: my-script
Section: python
Priority: optional
Maintainer: Name, <email@address>
Build-Depends: debhelper (>= 7),
               python (>= 2.6.6-3~)
Standards-Version: 3.9.2
X-Python-Version: >= 2.6


Package: my-script
Architecture: all
Section: python
Depends: python-appindicator, ${misc:Depends}, ${python:Depends}
Description: short description
 A long description goes here.
 .
 It can contain multiple paragraphs

debian / install :

myScript usr/bin/

Ten plik wskazuje, który plik zostanie zainstalowany w którym folderze.

Teraz zbuduj go z debuild --no-tgz-check

Spowoduje to utworzenie funkcjonalnego pakietu deb. Lintian rzuci kilka ostrzeżeń dotyczących braku orig.tar.gz, ale jeśli nie planujesz stworzyć właściwego projektu, który wyda wydania tarball, prawdopodobnie po prostu zechcesz to zignorować.


12
Jako program pakujący (i backporter) dość często pakuję skrypty python. Mogę śmiało powiedzieć, że ta odpowiedź tutaj jest najbardziej kompletnym wyjaśnieniem, co zrobić, aby utworzyć pakiet dla pojedynczego skryptu Pythona.
Thomas Ward

2
Czy możesz również zaktualizować go dla Python 3? Chyba musimy dokonać zmian debian/rulesi debian/control, ale nie jestem pewien.
Aditya

1
@Aditya, może nowe pytanie dotyczy Python3? Odpowiedź nie byłaby inna, ale ta odpowiedź ma być najprostszym / najsłabszym minimalnym przykładem sposobu pakowania skryptu w języku Python. Nie jestem pewien, czy chcę to zaśmiecać wieloma implementacjami.
andrewsomething

@andrewsomething: Być może zainteresuje Cię ten, który skłonił mnie do pozostawienia tego komentarza ... Potrzebuję trochę edycji na tym, spróbuję spróbować ...
Aditya

1
Co z bibliotekami? Jeśli skrypt Pythona importuje biblioteki, to nie zadziała
D.Snap

18
  1. utwórz folder o dowolnej nazwie w domu, np .: mypyscript
  2. Otwórz folder i utwórz dwa foldery o nazwach „DEBIAN” i „usr”
  3. Otwórz folder DEBIAN. Utwórz plik tekstowy (bez rozszerzenia) z nazwą „control”.
  4. Otwórz „control” i wpisz, co następuje, i zapisz go w DEBIAN

    Package: mypyscript
    Version: 0.01
    Architecture: all
    Maintainer: your name<your mail id>
    Installed-Size: 2
    Depends: python-appindicator
    Section: extras
    Priority: optional
    Homepage: your homepage
    Description: describe
  5. Powrót do folderu o nazwie mypyscript. Otwórz „usr”. Utwórz folder o nazwie „bin”. Otwórz „bin” i wklej tam swój plik Pythonscript.

  6. Możesz także wprowadzić pozycję menu. Ale to nie jest konieczne.
  7. Wróć do folderu domowego, w którym znajduje się folder „mypyscript”, lub zamknij przeglądarkę plików.
  8. Otwórz terminal. Upewnij się, że terminal znajduje się w folderze domowym. wpisz. dpkg -b mypyscriptNastępnie naciśnij klawisz enter. W kilka sekund Twój pakiet deb jest gotowy

Uwaga: proszę poprawnie wypełnić plik „kontrolny”. Nie używaj apostrofów. Służy wyłącznie do wskazywania nazwisk.


1
Działa świetnie! Przyjęta odpowiedź jest złożona.
SuB

Nie zapomnij zmienić uprawnienia „myscript” na 755, a jego właściciel na rootowanie.
SuB

Jak utworzyć pozycję menu?
To Do

9

Możesz spróbować z Debreate , narzędziem GUI do tworzenia pakietów.


Debcreate jest spoko. Do tej pory mi się podobało, właśnie zacząłem go używać do budowania z kodu źródłowego Pythona.
answerSeeker


2

Spróbuj pkgme . To powinno po prostu działać.

Zainstaluj przez:

sudo apt install pkgme

Uruchom przez:

pkgme
debuild

(Może być konieczne uruchomienie nowego programisty gpg --gen-key, zobacz Programowanie kluczy, aby zrobić to poprawnie)



0

Możesz spróbować użyć Debreate

Jest to interfejs GUI do tworzenia pakietów i innych rzeczy, których możesz używać z PPA, także jeśli nie chcesz pobierać go ze strony wymienionej powyżej.

sudo add-apt-repository ppa:antumdeluge/<ppaname>; sudo apt update; sudo apt install debreate

Założyłem ppa, tak aby działał jako jeden wiersz kodu! Dziękuję za niesamowite pytanie i pamiętaj, aby ciągle wstawiać te wiersze kodu do terminala!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.