Vraag Hoe maak je een deb-pakket voor een python3-script?


Ik heb één Python-bestand, main.py. Ik zou er graag een .deb-pakket van willen maken en dan main.py kunnen uitvoeren door de pakketnaam van de terminal te typen. Het is geschreven in Python 3, dus de naam van het pakket zou moeten lopen:

python3 main.py

De enige afhankelijkheid die ik ken is python3.

Ik heb geprobeerd een deb te maken met een afhankelijkheid van python3 en daarna te draaien python3 packagename, maar ik krijg:

/usr/bin/python3: can't find '__main__' module in 'packagename'

De poging om Debreate te gebruiken voor het maken van pakketten kan niet worden geopend met:

Traceback (most recent call last):
  File "/usr/bin/debreate", line 12, in <module>
    import wx, sys, os, debreate, db, language, shutil
  File "/usr/share/debreate/debreate.py", line 23, in <module>
    import os, sys, wx.lib.dialogs, db, webbrowser, language, shutil, subprocess
  File "/usr/share/debreate/db.py", line 5, in <module>
    import wx, wx.combo, wx.lib.mixins.listctrl as LC, os, sys, language
ImportError: No module named combo

6
2018-01-03 16:02


oorsprong


mogelijk duplicaat van Hoe maak ik een deb-pakket voor een enkel Python-script? - Aditya
Aditya: alle antwoorden gebruikten python2. Ik heb het nodig om python3 te gebruiken. - meecoder
Ik moet ook het pakket van de bevellijn kunnen runnen. Ik heb dit al geprobeerd, maar na de installatie krijg ik het commando niet gevonden - meecoder
Ik heb een reactie achtergelaten onder het bericht van @andrewsomething om het bij te werken voor Python 3. In de tussentijd alstublieft Bewerk uw vraag om op te nemen wat u al hebt geprobeerd en wat de resultaten / fouten zijn die u krijgt. - Aditya
heb je geprobeerd fpm? FUNDAMENTEEL BEGINSEL: ALS FPM NIET HELPT DAT U PAKKETTEN GEMAKKELIJK MAAKT, DAN IS ER EEN BUG IN FPM. - jfs


antwoorden:


Het maken van een .deb voor een python3-script is heel eenvoudig en vereist slechts een paar wijzigingen in debian / rules en debian / control als je bekend bent met python2-verpakkingen.

In een notendop:

  1. Maak de pakketbron dir

    mkdir myscript-0.1
  2. Kopieer je python3-script (of het voorbeeldscript hieronder) naar de bronmap

    cp ~/myscript myscript-0.1
    cd myscript-0.1

    Voorbeeldscript:

    #!/usr/bin/python3
    
    if __name__ == '__main__':
        print("Hello world")
  3. Maak het verpakkingsskelet (debian / *)

    dh_make -s --indep --createorig
     
  4. Verwijder de voorbeeldbestanden

    rm debian/*.ex debian/*.EX debian/README.*
     
  5. Bewerk debian / control

    Vervang de inhoud door de volgende tekst:

    Source: myscript
    Section: utils
    Priority: optional
    Maintainer: Name, 
    Build-Depends: debhelper (>= 9), python3
    Standards-Version: 3.9.5
    X-Python3-Version: >= 3.2
    
    Package: myscript
    Architecture: all
    Depends: ${misc:Depends}, ${python3:Depends}
    Description: insert up to 60 chars description
     insert long description, indented with spaces
    
  6. debian / install moet zowel het te installeren script als de doelmap bevatten

    echo myscript usr/bin > debian/install
     
  7. Bewerk debian / regels

    Vervang de inhoud door de volgende tekst:

    #!/usr/bin/make -f
    
    %:
        dh $@ --with=python3

    Notitie: het is eerder een TAB dh $@, geen vier ruimtes!

  8. Bouw het pakket

    debuild -us -uc
     

U krijgt een paar waarschuwingen / fouten van Lintian, maar uw pakket is klaar voor gebruik:

../myscript_0.1-1_all.deb

9
2018-03-10 09:01



Weet u hoe u vertalingen (PO / POT) in het DEB-bestand moet opnemen? Ik denk dat er een bevel nodig is binnen Debian / regels, maar ik heb het nooit kunnen achterhalen. - Bernmeister
@Bernmeister, Maak een nieuwe vraag over vertaalondersteuning. Ik zou deze het liefst zo eenvoudig mogelijk houden. Bedankt - Sylvain Pineau


Voor de fout die je tegenkomt debreate,

sudo apt-get install python-wxgtk2.8

bron: bron van bovenstaande oplossing


0
2017-08-27 10:59