2013-07-01 22 views
17

AIMdebianzing program Pythona aby uzyskać .deb

Aby utworzyć instalowalnego .deb plik (lub pakiet). Które po kliknięciu instalują oprogramowanie na komputerze z systemem Linux, a ikona zostanie umieszczona na panelu GNOME. Aby uruchomić tę aplikację od tego miejsca.

Co mam mowa

odniosłem się do dwóch przewodników zdebianizowania.

Guide 1

Guide 2

Pierwszy z nich miał film, który można było zrozumieć, częściowo ze względu na akcent, a częściowo dlatego, że było beznadziejnie przestarzałe. (Został dodany w 2007 roku)

A drugi był całkowicie tekstem. Dotarłem do czwartego kroku, buduje pakiet. Ale kiedy to zrobiłem, otrzymałem wyniki, które nie pasowały do ​​tego, co podano w przewodniku.

Co mogę wymagać

Mam prosty program Pythona. Przyjmuje swój wiek, a następnie drukuje z powrotem, jeśli wiek jest niższy, równy lub wyższy niż 18 lat. Istnieje tylko jeden plik i żadna inna zależność dla tego programu. I chcę to zbudować w .deb.

Specyfikacja

-Python 2,7

-linux Mint

Edit

Śledziłem dokładną strukturę katalogów jak poinstruowani jak ty. I zastąpił wszystkie myscript z cowsandbulls. Kompilacja zakończona i dostałem debian. Po zainstalowaniu go, a następnie uruchomiono polecenie cowsandbulls od terminala mam następujący błąd:

Traceback (most recent call last): 
    File "/usr/bin/cowsandbulls", line 9, in <module> 
    load_entry_point('cowsandbulls==1.0', 'gui_scripts', 'cowsandbulls')() 
    File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 337, in load_entry_point 
    return get_distribution(dist).load_entry_point(group, name) 
    File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2311, in load_entry_point 
    return ep.load() 
    File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2017, in load 
    entry = __import__(self.module_name, globals(),globals(), ['__name__']) 
ImportError: No module named cowsandbulls 

Odpowiedz

21

właśnie testowane stdeb (patrz https://pypi.python.org/pypi/stdeb) pakiet Pythona do toczenia dowolny inny pakiet Pythona w pakiet Debiana.

Najpierw zainstalowałem stdeb:

apt-get install python-stdeb 

Potem zrobiłem prosty skrypt o nazwie myscript.py o następującej treści:

def main(): 
    print "Hello world, says myscript!" 
    # wait for input from the user 
    raw_input() 

if __name__ == '__main__': 
    main() 

ważne, twoja struktura katalogów powinna być:

somewhere/myscript/ 
    setup.py 
    myscript/ 
     __init__.py 
     myscript.py 

W konfiguracji.Plik py, można zrobić coś takiego:

import os 
from setuptools import setup 
from nvpy import nvpy 

setup(
    name = "myscript", 
    version = "1.0", 
    author = "Charl P. Botha", 
    author_email = "[email protected]", 
    description = "Demo of packaging a Python script as DEB", 
    license = "BSD", 
    url = "https://github.com/cpbotha/nvpy", 
    packages=['myscript'], 
    entry_points = { 
     'console_scripts' : ['myscript = myscript.myscript:main'] 
    }, 
    data_files = [ 
     ('share/applications/', ['vxlabs-myscript.desktop']) 
    ], 
    classifiers=[ 
     "License :: OSI Approved :: BSD License", 
    ], 
) 

Dyrektywa console_scripts jest ważne, to będzie stworzyć wykonywalny skrypt o nazwie my_script, które będą dostępne w całym systemie po zainstalowaniu wypadkową DEB. Jeśli twój skrypt używa czegoś takiego jak tkinter lub wxpython i ma graficzny interfejs użytkownika, powinieneś użyć gui_scripts zamiast console_scripts.

Dyrektywa zainstaluje odpowiedni plik pulpitu w /usr/share/applications, dzięki czemu można również uruchomić myscript ze środowiska komputerowego. vxlabs-myscript.desktop wygląda następująco:

[Desktop Entry] 
Version=1.0 
Type=Application 
Name=myscript 
Comment=Minimal stdeb example 
# myscript should wait for user input at the end, else the terminal 
# window will disappear immediately. 
Exec=myscript 
Icon=/usr/share/icons/gnome/48x48/apps/file-manager.png 
Categories=Utility; 
# desktop should run this in a terminal application 
Terminal=true 
StartupNotify=true 
StartupWMClass=myscript 

Aby zbudować DEB, należy wykonać następujące czynności w prawym górnym poziomie myscript:

python setup.py --command-packages=stdeb.command bdist_deb 

co stworzy .deb w katalogu deb_dist.

Po zainstalowaniu DEB, utworzonego w ten sposób, mogę uruchomić myscript z wiersza poleceń, a także mogę go wywołać z mojego środowiska graficznego.

Oto repo github z kodem powyższym przykładzie: https://github.com/cpbotha/stdeb-minimal-example

+0

Sir: jaka powinna być treść '__init __ py'.? – IcyFlame

+1

'__init __. Py' jest pustym plikiem, ale musisz go mieć, inaczej najskrytszy katalog' myscript' nie będzie widziany jako pakiet i nie będzie można go importować. Link github, który zamieściłem na dole mojej odpowiedzi, zawiera cały kod. –

+0

czy mogę zmienić punkt wejścia na nazwę jakiejś innej funkcji? – IcyFlame

1

Prawo sposobem budowania pakietu deb korzysta dpkg-buildpackage ale czasem jest to trochę skomplikowane. Zamiast tego możesz użyć dpkg -b <folder>, aby utworzyć pakiet Debiana.

Są podstawy do tworzenia pakietu Debiana z dpkg -b <folder> z dowolnego binarny lub z dowolnym rodzajem scenariusza, który uruchamia się automatycznie, bez konieczności ręcznej kompilacji (Python, Bash, Pearl, Ruby):

  1. utworzyć pliki i foldery w celu odtworzenia następującą strukturę:
ProgramName-Version/ 
    ProgramName-Version/DEBIAN 
    ProgramName-Version/DEBIAN/control 
    ProgramName-Version/usr/ 
    ProgramName-Version/usr/bin/ 
    ProgramName-Version/usr/bin/your_script 

skrypty umieszczone są bezpośrednio na /usr/bin/ wywoływana z terminala, należy pamiętać, że nie dodać rozszerzenie do SCR ipt. Ponadto można zauważyć, że struktura pakietu deb będzie strukturą programu po jego zainstalowaniu. Jeśli więc podążasz za tą logiką, jeśli twój program ma pojedynczy plik, możesz go bezpośrednio umieścić pod ProgramName-Version/usr/bin/your_script, ale jeśli masz wiele plików, powinieneś umieścić je pod ProgramName-Version/usr/share/ProgramName/all your files i umieścić tylko jeden plik pod numerem /usr/bin/, który wywoła twoje skrypty z /usr/share/ProgramName/

  1. zmienić wszystkie uprawnienia do folderu root:

    chown root:root -R /path/to/ProgramName-Version 
    
  2. Zmień uprawnienia do skryptu:

    chmod 0755 /path/to/the/script 
    
  3. Wreszcie, możesz uruchomić: dpkg -b /path/to/the/ProgramName-Version, a twój pakiet deb zostanie utworzony!(Można również dodać Poczty/pre skrypty Inst i wszystko, co chcesz, to działa jak normalny pakiet Debiana)


Oto przykład pliku control. Wystarczy tylko skopiować i wkleić go do pustego pliku o nazwie „kontrola” i umieścić go w folderze DEBIAN

Package: ProgramName 
Version: VERSION 
Architecture: all 
Maintainer: YOUR NAME <EMAIL> 
Depends: python2.7, etc , etc, 
Installed-Size: in_kb 
Homepage: http://foo.com 
Description: Here you can put a one line description. This is the short Description. 
Here you put the long description, indented by 1 space. 

Jeśli chcesz zbudować za pomocą dpkg -b <folder> można użyć this program że zrobi wszystko, z jedno polecenie. Jeśli regularnie tworzysz pakiety, boli to wszystko, o czym wspomniałem!

* Przewodnik został zaczerpnięty z Basics of Debian Packages