2009-09-05 66 views
41

我需要編寫或查找腳本,以使用Python包中的python-support創建Debian軟件包。 Python包將是純Python,不含C擴展。如何執行Python包的Debian打包?

用於測試目的的Python包只是一個包含空文件__init__.py和單個Python模塊package_test.py的目錄。

包裝腳本必須使用python-support爲目標平臺上可能的多個Python安裝(即Ubuntu Jaunty上的v2.5和v2.6)提供正確的字節碼。

我在Google上找到的大部分建議都只是惡意黑客的例子,甚至不使用python-support或python-central。

我花了好幾個小時來研究這個問題,我能想到的最好的辦法就是從現有的開源項目中剽竊腳本,但我不知道我在做什麼需要哪些位。

有沒有人在這裏用一種合理的非hacky方式製作了一個Python包中的Debian軟件包?

我開始認爲從沒有關於Debian打包和python支持的知識到獲取工作腳本需要一週多的時間。它花了多長時間?

回答

18

我將利用現有的Debian包的來源,替換它中的實際包裝r包。要查找取決於Python的支持包的列表,請

apt-cache rdepends python-support 

選擇一個包,是Architecture: all,所以它是一個純Python包。通過這個列表,我發現例如python-flup可能是一個很好的起點。 爲了得到一個這樣的包的源,做

apt-get source <package> 

構建它,做

cd <packagesrc> 
dpkg-buildpackage -rfakeroot 

當編輯它,希望你只需要在debian文件夾中的文件;用您自己的軟件包名稱替換所有對flup的引用。

一旦你開始了,它應該需要一天才能完成。

+3

注:因爲這個答案寫,'巨蟒,support'贊成'dh_python2的已被否決'。 Debian wiki簡要介紹了[Transition to dh_python2](http://wiki.debian.org/Python/TransitionToDHPython2)。 – drdaeman 2012-12-19 12:51:26

+0

@drdaeman @Martin:dh_python2現在直接發佈到'python'包中,所以這個配方不再適用。你會如何更新它? – bukzor 2013-11-07 20:54:20

19

我想你想要的是http://pypi.python.org/pypi/stdeb

stdeb通過新 的distutils命令,sdist_dsc產生從Python包Debian源碼包 。 Debian軟件包提供了 的自動默認值,但生成的軟件包的許多方面 可能是 自定義的(請參閱下面的定製 部分)。額外的 命令bdist_deb創建了一個Debian 二進制包,一個.deb文件。

14

大多數張貼在這裏的答案是過時的,幸運的是偉大的Debian維基帖子被最近做了,這也解釋了目前的最佳做法,並介紹瞭如何構建Debian軟件包爲Python模塊和應用。

15

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

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

    chown root:root -R /path/to/ProgramName-Version 
    
  3. 更改腳本的權限:

    chmod 0755 /path/to/the/script 
    
  4. 最後,您可以運行: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. 
+0

謝謝,爲指導。我如何添加前期/後期inst腳本? – Gleb 2016-07-05 10:12:13

+3

@Gleb前/後腳本必須放在'DEBIAN'文件夾內。只要用正確的名稱'preinst','postinst','prerm' [等](https://www.debian.org/doc/debian-policy/ch-maintainerscripts.html)添加腳本。我很高興它幫助你:) – rsm 2016-07-05 10:19:26