Ricerca nel sito web

Pacchetto applicazioni e programmi PyGObject come pacchetto ".deb" per il desktop Linux - Parte 4


Continuiamo con voi la serie di programmazione PyGObject sul desktop Linux, nella 4a parte della serie spiegheremo come pacchettizzare i programmi e le applicazioni che abbiamo creato per Desktop Linux che utilizza PyGObject come pacchetto Debian.

I pacchetti Debian (.deb) sono il formato più utilizzato per installare programmi sotto Linux, il sistema “dpkg ” che si occupa dei pacchetti .deb è l'impostazione predefinita su tutte le distribuzioni Linux basate su Debian come Ubuntu e Linux Mint. Ecco perché spiegheremo solo come pacchettizzare i nostri programmi per Debian.

Crea un pacchetto Debian dalle tue applicazioni PyGObject

Innanzitutto, dovresti avere alcune conoscenze di base sulla creazione di pacchetti Debian, la seguente guida ti aiuterà molto.

  1. Introduzione al pacchetto Debian

In breve, se hai un progetto chiamato “myprogram”, deve contenere i seguenti file e cartelle in modo da poterlo impacchettare.

  1. debian (Cartella): questa cartella include tutte le informazioni sul pacchetto Debian suddivise in molti sottofile.
  2. po (Cartella): la cartella po contiene i file di traduzione del programma (lo spiegheremo nella parte 5).
  3. myprogram (File): questo è il file Python che abbiamo creato utilizzando PyGObject, è il file principale del progetto.
  4. ui.glade (File): il file dell'interfaccia utente grafica. Se hai creato l'interfaccia dell'applicazione utilizzando Glade, devi includere questo file in
    il tuo progetto.
  5. bMyprogram.desktop (File): questo è il file responsabile della visualizzazione dell'applicazione nel menu delle applicazioni.
  6. setup.py (File): questo file è responsabile dell'installazione di qualsiasi programma Python nel sistema locale, è molto importante in qualsiasi programma Python, ha anche molti altri modi di utilizzo.

Naturalmente... Ci sono molti altri file e cartelle che puoi includere nel tuo progetto (in effetti puoi includere tutto quello che vuoi) ma questi sono quelli di base.

Ora iniziamo a confezionare un progetto. Crea una nuova cartella chiamata “myprogram”, crea un file chiamato “myprogram” e aggiungivi il seguente codice.

#!/usr/bin/python 
-*- coding: utf-8 -*- 

## Replace your name and email. 
My Name <[email > 

## Here you must add the license of the file, replace "MyProgram" with your program name. 
License: 
   MyProgram is free software: you can redistribute it and/or modify 
   it under the terms of the GNU General Public License as published by 
   the Free Software Foundation, either version 3 of the License, or 
   (at your option) any later version. 

   MyProgram is distributed in the hope that it will be useful, 
   but WITHOUT ANY WARRANTY; without even the implied warranty of 
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
   GNU General Public License for more details. 

   You should have received a copy of the GNU General Public License 
   along with MyProgram.  If not, see <http://www.gnu.org/licenses/>. 

from gi.repository import Gtk 
import os 

class Handler: 
  
  def openterminal(self, button): 
    ## When the user clicks on the first button, the terminal will be opened. 
    os.system("x-terminal-emulator ") 
  
  def closeprogram(self, button): 
    Gtk.main_quit() 
    
Nothing new here.. We just imported the 'ui.glade' file. 
builder = Gtk.Builder() 
builder.add_from_file("/usr/lib/myprogram/ui.glade") 
builder.connect_signals(Handler()) 
window = builder.get_object("window1") 
window.connect("delete-event", Gtk.main_quit) 
window.show_all() 
Gtk.main()

Crea un file ui.glade e riempilo con questo codice.

<?xml version="1.0" encoding="UTF-8"?> 
<!-- Generated with glade 3.16.1 --> 
<interface> 
  <requires lib="gtk+" version="3.10"/> 
  <object class="GtkWindow" id="window1"> 
    <property name="can_focus">False</property> 
    <property name="title" translatable="yes">My Program</property> 
    <property name="window_position">center</property> 
    <property name="icon_name">applications-utilities</property> 
    <property name="gravity">center</property> 
    <child> 
      <object class="GtkBox" id="box1"> 
        <property name="visible">True</property> 
        <property name="can_focus">False</property> 
        <property name="margin_left">5</property> 
        <property name="margin_right">5</property> 
        <property name="margin_top">5</property> 
        <property name="margin_bottom">5</property> 
        <property name="orientation">vertical</property> 
        <property name="homogeneous">True</property> 
        <child> 
          <object class="GtkLabel" id="label1"> 
            <property name="visible">True</property> 
            <property name="can_focus">False</property> 
            <property name="label" translatable="yes">Welcome to this Test Program !</property> 
          </object> 
          <packing> 
            <property name="expand">False</property> 
            <property name="fill">True</property> 
            <property name="position">0</property> 
          </packing> 
        </child> 
        <child> 
          <object class="GtkButton" id="button2"> 
            <property name="label" translatable="yes">Click on me to open the Terminal</property> 
            <property name="visible">True</property> 
            <property name="can_focus">True</property> 
            <property name="receives_default">True</property> 
            <signal name="clicked" handler="openterminal" swapped="no"/> 
          </object> 
          <packing> 
            <property name="expand">False</property> 
            <property name="fill">True</property> 
            <property name="position">1</property> 
          </packing> 
        </child> 
        <child> 
          <object class="GtkButton" id="button3"> 
            <property name="label">gtk-preferences</property> 
            <property name="visible">True</property> 
            <property name="can_focus">True</property> 
            <property name="receives_default">True</property> 
            <property name="use_stock">True</property> 
          </object> 
          <packing> 
            <property name="expand">False</property> 
            <property name="fill">True</property> 
            <property name="position">2</property> 
          </packing> 
        </child> 
        <child> 
          <object class="GtkButton" id="button4"> 
            <property name="label">gtk-about</property> 
            <property name="visible">True</property> 
            <property name="can_focus">True</property> 
            <property name="receives_default">True</property> 
            <property name="use_stock">True</property> 
          </object> 
          <packing> 
            <property name="expand">False</property> 
            <property name="fill">True</property> 
            <property name="position">3</property> 
          </packing> 
        </child> 
        <child> 
          <object class="GtkButton" id="button1"> 
            <property name="label">gtk-close</property> 
            <property name="visible">True</property> 
            <property name="can_focus">True</property> 
            <property name="receives_default">True</property> 
            <property name="use_stock">True</property> 
            <signal name="clicked" handler="closeprogram" swapped="no"/> 
          </object> 
          <packing> 
            <property name="expand">False</property> 
            <property name="fill">True</property> 
            <property name="position">4</property> 
          </packing> 
        </child> 
      </object> 
    </child> 
  </object> 
</interface>

Non c'è niente di nuovo fino ad ora... Abbiamo appena creato un file Python e il suo file di interfaccia. Ora crea un file “setup.py” nella stessa cartella e aggiungivi il seguente codice, ogni riga è spiegata nei commenti.

Here we imported the 'setup' module which allows us to install Python scripts to the local system beside performing some other tasks, you can find the documentation here: https://docs.python.org/2/distutils/apiref.html 
from distutils.core import setup 

setup(name = "myprogram", # Name of the program. 
      version = "1.0", # Version of the program. 
      description = "An easy-to-use web interface to create & share pastes easily", # You don't need any help here. 
      author = "TecMint", # Nor here. 
      author_email = "[email ",# Nor here :D 
      url = "http://example.com", # If you have a website for you program.. put it here. 
      license='GPLv3', # The license of the program. 
      scripts=['myprogram'], # This is the name of the main Python script file, in our case it's "myprogram", it's the file that we added under the "myprogram" folder. 

Here you can choose where do you want to install your files on the local system, the "myprogram" file will be automatically installed in its correct place later, so you have only to choose where do you want to install the optional files that you shape with the Python script 
      data_files = [ ("lib/myprogram", ["ui.glade"]), # This is going to install the "ui.glade" file under the /usr/lib/myprogram path. 
                     ("share/applications", ["myprogram.desktop"]) ] ) # And this is going to install the .desktop file under the /usr/share/applications folder, all the folder are automatically installed under the /usr folder in your root partition, you don't need to add "/usr/ to the path. 

Ora crea un file “myprogram.desktop” nella stessa cartella e aggiungi il seguente codice, è spiegato anche nei commenti.

This is the .desktop file, this file is the responsible file about showing your application in the applications menu in any desktop interface, it's important to add this file to your project, you can view more details about this file from here: https://developer.gnome.org/integration-guide/stable/desktop-files.html.en 
[Desktop Entry] 
The default name of the program. 
Name=My Program 
The name of the program in the Arabic language, this name will be used to display the application under the applications menu when the default language of the system is Arabic, use the languages codes to change the name for each language. 
Name[ar]=برنامجي 
Description of the file. 
Comment=A simple test program developed by me. 
Description of the file in Arabic. 
Comment[ar]=برنامج تجريبي بسيط تم تطويره بواسطتي. 
The command that's going to be executed when the application is launched from the applications menu, you can enter the name of the Python script or the full path if you want like /usr/bin/myprogram 
Exec=myprogram 
Do you want to run your program from the terminal? 
Terminal=false 
Leave this like that. 
Type=Application 
Enter the name of the icon you want to use for the application, you can enter a path for the icon as well like /usr/share/pixmaps/icon.png but make sure to include the icon.png file in your project folder first and in the setup.py file as well. Here we'll use the "system" icon for now. 
Icon=system 
The category of the file, you can view the available categories from the freedesktop website.
Categories=GNOME;GTK;Utility; 
StartupNotify=false 

Abbiamo quasi finito.. Dobbiamo solo creare alcuni piccoli file nella cartella “debian ” per fornire informazioni sul nostro pacchetto per “dpkg” sistema.

Apri la cartella “debian” e crea i seguenti file.

control
compat
changelog
rules

control: questo file fornisce le informazioni di base sul pacchetto Debian, per maggiori dettagli visitare Campi di controllo del pacchetto Debian.

Source: myprogram
Maintainer: My Name <[email > 
Section: utils 
Priority: optional 
Standards-Version: 3.9.2 
Build-Depends: debhelper (>= 9), python2.7 

Package: myprogram 
Architecture: all 
Depends: python-gi 
Description: My Program 
Here you can add a short description about your program.

compat: Questo è solo un file importante per il sistema dpkg, include solo il magico numero 9, lascialo così.

9

log delle modifiche: qui potrai aggiungere le modifiche apportate al tuo programma. Per maggiori informazioni, visita Sorgente del log delle modifiche del pacchetto Debian.

myprogram (1.0) trusty; urgency=medium 

  * Add the new features here. 
  * Continue adding new changes here. 
  * And here. 

 -- My Name Here <[email >  Sat, 27 Dec 2014 21:36:33 +0200

regole: questo file è responsabile dell'esecuzione del processo di installazione sul computer locale per installare il pacchetto, puoi visualizzare ulteriori informazioni
su questo file da qui: Regole predefinite del pacchetto Debian.

Anche se non avrai bisogno di altro per il tuo programma Python.

#!/usr/bin/make -f 
This file is responsible about running the installation process on the local machine to install the package, you can view more information about this file from here: https://www.debian.org/doc/manuals/maint-guide/dreq.en.html#defaultrules Though you won't need anything more for your Python program. 
%: 
    dh $@ 
override_dh_auto_install: 
    python setup.py install --root=debian/myprogram --install-layout=deb --install-scripts=/usr/bin/ # This is going to run the setup.py file to install the program as a Python script on the system, it's also going to install the "myprogram" script under /usr/bin/ using the --install-scripts option, DON'T FORGET TO REPLACE "myprogram" WITH YOUR PROGRAM NAME. 
override_dh_auto_build:

Ora che abbiamo creato con successo tutti i file necessari per il nostro programma, ora iniziamo a crearne il pacchetto. Innanzitutto, assicurati di aver installato alcune dipendenze per il processo di compilazione prima di iniziare.

sudo apt-get update
sudo apt-get install devscripts

Ora immagina che la cartella "myprogram" sia nella tua cartella home (/home/user/myprogram) per comprimerla come pacchetto Debian, esegui i seguenti comandi.

cd /home/user/myprogram
debuild -us -uc
Uscita del campione
hanny@hanny-HP-Pavilion-15-Notebook-PC:~/Projects/myprogram$
debuild -us -uc dpkg-buildpackage -rfakeroot -D -us -uc
dpkg-buildpackage: source package myprogram
dpkg-buildpackage: source version 1.0
dpkg-buildpackage: source distribution trusty
dpkg-buildpackage: source changed by My Name Here
<[email >
dpkg-source --before-build myprogram
dpkg-buildpackage: host architecture i386
fakeroot debian/rules clean
dh clean
dh_testdir
dh_auto_clean
....
.....
Finished running lintian.

E questo è tutto! Il tuo pacchetto Debian è stato creato con successo:

Per installarlo su qualsiasi distribuzione basata su Debian, esegui.

sudo dpkg -i myprogram_1.0_all.deb

Non dimenticare di sostituire il file sopra con il nome del pacchetto.. Ora, dopo aver installato il pacchetto, puoi eseguire il programma dal menu delle applicazioni.

E funzionerà..

Qui termina la quarta parte della nostra serie su PyGObject.. Nella prossima lezione spiegheremo come localizzare facilmente l'applicazione PyGObject, fino ad allora rimanete sintonizzati...