Ngwa na Mmemme PyGObject ngwugwu dị ka ngwugwu .deb maka Linux Desktop - Akụkụ 4


Anyị na gị na-aga n'ihu usoro mmemme PyGObject na desktọpụ Linux, na nke anọ akụkụ nke usoro anyị ga-akọwa otu esi chịkọta mmemme na ngwa ndị anyị mepụtara maka Desktọpụ Linux na-eji PyGObject dị ka ngwugwu Debian.

Ngwunye Debian (.deb) bụ usoro a na-ejikarị wụnye mmemme n'okpuru Linux, usoro \dpkg nke na-emetụta ngwugwu .deb bụ ndabara na nkesa Linux niile dabere na Debian dị ka Ubuntu na Linux Mint. Ọ bụ ya mere anyị ga-eji na-akọwa naanị otu esi etinye mmemme maka Debian.

Mepụta ngwugwu Debian site na ngwa PyGObject gị

Nke mbụ, ị kwesịrị inwe ụfọdụ ihe ọmụma gbasara ịmepụta ngwugwu Debian, ntuziaka a ga-enyere gị aka nke ukwuu.

  1. Mmalite na nkwakọ ngwaahịa Debian

Na nkenke, ọ bụrụ na ị nwere oru ngo a na-akpọ \myprogram ọ ga-enwerịrị faịlụ na folda ndị a ka ị nwee ike chịkọta ya.

  1. debian ( nchekwa): nchekwa a gụnyere ozi niile gbasara ngwungwu Debian kewara n'ọtụtụ obere faịlụ.
  2. po (Nchekwa): Mpempe akwụkwọ po gụnyere faịlụ ntụgharị asụsụ maka mmemme (Anyị ga-akọwa ya na akụkụ 5).
  3. myprogram (Faịlụ): Nke a bụ faịlụ Python anyị jiri PyGObject mepụta, ọ bụ isi faịlụ nke ọrụ a.
  4. ui.glade (Faịlụ): Faịlụ interface onye ọrụ eserese. oru ngo gi.
  5. bMyprogram.desktop (Faịlụ): Nke a bụ faịlụ maka igosi ngwa na menu ngwa.
  6. setup.py (File): Faịlụ a bụ maka ịwụnye mmemme Python ọ bụla n'ime sistemụ mpaghara, ọ dị ezigbo mkpa na mmemme Python ọ bụla, o nwekwara ọtụtụ ụzọ ndị ọzọ eji eme ihe.

N'ezie .. Enwere ọtụtụ faịlụ na nchekwa ndị ọzọ ị nwere ike ịgụnye na ọrụ gị (n'ezie ị nwere ike ịgụnye ihe ọ bụla ịchọrọ) mana ndị ahụ bụ isi.

Ugbu a, ka anyị malite ịkwakọ ngwaahịa. Mepụta folda ọhụrụ akpọrọ \myprogram, mepụta faịlụ akpọrọ \myprogram wee tinye koodu na-esonụ na ya.

#!/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()

Mepụta faịlụ ui.glade wee dejupụta koodu a.

<?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>

Ọ dịghị ihe ọhụrụ ruo ugbu a. Anyị ka kere a Python faịlụ na interface faịlụ. Ugbu a mepụta faịlụ \setup.py n'ime otu nchekwa ahụ, ma tinye koodu a na ya, a na-akọwa ahịrị ọ bụla na nkọwa.

# 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. 

Ugbu a mepụta faịlụ \myprogram.desktop n'ime otu nchekwa ahụ, tinye koodu na-esonụ, a kọwakwara ya nke ọma na nkwupụta.

# 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 

Ọ fọrọ nke nta ka ọ bụrụ ebe a ugbu a. Anyị ga-emepụta obere faịlụ n'okpuru nchekwa \debian iji nye ozi gbasara ngwugwu anyị maka \dpkg > usoro.

Mepee nchekwa \debian, wee mepụta faịlụ ndị a.

control
compat
changelog
rules

njikwa: Faịlụ a na-enye ozi bụ isi gbasara ngwungwu Debian, maka nkọwa ndị ọzọ, biko gaa na Ubi njikwa ngwugwu 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: Nke a bụ naanị faịlụ dị mkpa maka sistemụ dpkg, ọ gụnyere naanị nọmba anwansi 9, hapụ ya ka ọ dị.

9

changelog: N'ebe a, ị ga-enwe ike itinye mgbanwe ndị ị na-eme na mmemme gị, maka ozi ndị ọzọ, biko gaa na Debian Package Changelog Source.

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

iwu: Faịlụ a na-ahụ maka ịme usoro nrụnye na igwe mpaghara iji wụnye ngwugwu, ị nwere ike ịlele ozi ndị ọzọ
gbasara faịlụ a si ebe a: Iwu ndabara nke ngwugwu Debian.

Agbanyeghị na ịgaghị achọ ihe ọ bụla maka mmemme Python gị.

#!/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 [email  
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:

Ugbu a anyị mepụtara faịlụ niile dị mkpa maka mmemme anyị nke ọma, ugbu a ka anyị bido ịkwakọ ya. Nke mbụ, jide n'aka na ị wụnyela ụfọdụ ndabere maka usoro nrụpụta tupu ịmalite.

$ sudo apt-get update
$ sudo apt-get install devscripts

Ugbu a were ya na nchekwa \myprogram dị na folda ebe obibi gị (/home/user/myprogram) iji chịkọta ya dị ka ngwugwu Debian, mee iwu ndị a. .

$ cd /home/user/myprogram
$ debuild -us -uc
[email :~/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.

Ma nke ahụ bụ! Emepụtara ngwungwu Debian gị nke ọma:

Ka ịwụnye ya na nkesa Debian ọ bụla, gbaa ọsọ.

$ sudo dpkg -i myprogram_1.0_all.deb

Echefula iji aha ngwugwu dochie faịlụ dị n'elu ... Ugbu a mgbe ị wụnye ngwugwu ahụ, ị nwere ike ịme mmemme ahụ site na ngwa ngwa.

Na ọ ga-arụ ọrụ..

Nke a mechiri akụkụ 4 nke usoro anyị gbasara PyGObject.. N'ihe ọmụmụ na-abịa, anyị ga-akọwa otu esi ewepụta ngwa PyGObject ngwa ngwa, ruo mgbe ahụ nọrọ na nche maka ya…