2013-07-01 66 views
17

目的debianzing Python程序以獲得一個.deb

要創建一個可安裝.deb文件(或封裝)。點擊時將在Linux機器上安裝該軟件,並將圖標放在GNOME面板上。從那裏啓動這個應用程序。

我所提到

我提到兩個Debian化指南。

Guide 1

Guide 2

第一個有這是無法理解的視頻,一方面是因爲口音的部分,因爲它是完全過時的和。(它是在2007年上傳)

第二個是完全的文本。我得到了第四步,建立包裝。但是當我這樣做時,我得到的輸出與指南中給出的不符。

我需要

我有一個簡單的Python程序。它需要你的年齡,如果年齡低於,等於或高於18歲,就會打印出來。這個程序只有一個文件,沒有其他依賴。我想把它建成.deb

規格

-python 2.7

-Linux薄荷

編輯

我跟着精確的目錄結構,你,你指示。並將所有myscript替換爲cowsandbulls。構建完成,我得到了debian。當我安裝它,然後從所述終端運行的命令cowsandbulls我得到了以下錯誤:

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 

回答

21

只是測試stdeb(見https://pypi.python.org/pypi/stdeb)Python包用於開啓任何其他Python封裝成Debian包。

首先我安裝stdeb:

apt-get install python-stdeb 

然後我做了一個包含以下內容稱爲myscript.py簡單的腳本:

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

if __name__ == '__main__': 
    main() 

重要的是,你的目錄結構應該是:

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

在設置中。PY文件,你做這樣的事情:

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", 
    ], 
) 

console_scripts指令是很重要的,它會創建一個名爲my_script可執行腳本,這將提供全系統的安裝產生的DEB後。如果您的腳本使用類似tkinterwxpython的圖形用戶界面,則應使用gui_scripts而不是console_scripts

data_files指令將安裝合適的桌面文件到/usr/share/applications,以便您還可以從桌面環境啓動myscriptvxlabs-myscript.desktop看起來是這樣的:

[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 

要構建DEB,你做的頂級myscript如下:

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

這將創造在目錄deb_dist一個.deb。

在安裝完DEB後,我可以從命令行運行myscript,我也可以從桌面環境調用它。

這裏有一個GitHub庫上面的示例代碼:https://github.com/cpbotha/stdeb-minimal-example

+0

爵士採取:應該是什麼的'__init __ py'內容? – IcyFlame

+1

'__init __。py'是一個空文件,但你需要它,否則最內層的'myscript'目錄不會被視爲一個包,並且不會被導入。我發佈在我答案底部的github鏈接包含所有代碼。 –

+0

我可以將入口點更改爲其他函數的名稱嗎? – IcyFlame

1

構建deb包的正確方法是使用dpkg-buildpackage但有時有點複雜。相反,您可以使用dpkg -b <folder>,它會創建您的Debian軟件包。

這些是與dpkg -b <folder>與任何二進制或與任何一種腳本,而無需手動編寫(Python的,猛砸,珍珠,紅寶石)自動運行創造一個Debian軟件包的基礎知識:

  1. 創建文件而爲了重建以下結構的文件夾:
ProgramName-Version/ 
    ProgramName-Version/DEBIAN 
    ProgramName-Version/DEBIAN/control 
    ProgramName-Version/usr/ 
    ProgramName-Version/usr/bin/ 
    ProgramName-Version/usr/bin/your_script 

放置在/usr/bin/腳本被直接從終端調用,請注意,我沒有添加擴展到SCR IPT。你也可以注意到deb程序包的結構將是程序安裝後的結構。因此,如果你的程序只有一個文件,你可以直接將它放在ProgramName-Version/usr/bin/your_script之下,但是如果你有多個文件,你應該把它們放在ProgramName-Version/usr/share/ProgramName/all your files之下,並且只放置一個文件在/usr/bin/之下,這個文件將會從/usr/share/ProgramName/

  • 改變所有的文件夾的權限根:

    chown root:root -R /path/to/ProgramName-Version 
    
  • 變更腳本的權限:

    chmod 0755 /path/to/the/script 
    
  • 最後,您可以運行:dpkg -b /path/to/the/ProgramName-Version並且您的deb包將被創建!(你也可以添加後/前出師表腳本和你想要的一切,它就像一個普通的Debian軟件包)


  • 這裏是control文件的例子。你只需要將它在複製粘貼到名爲「控制」的空文件,並把它在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. 
    

    如果你想使用dpkg -b <folder>您可以使用this program,將盡一切與建設一個命令。如果你經常建立軟件包,那麼做我提到的所有東西是一件痛苦的事情!

    *該指南從Basics of Debian Packages