単一の Python スクリプト用の deb パッケージを作成するにはどうすればよいですか?

単一の Python スクリプト用の deb パッケージを作成するにはどうすればよいですか?

私はdebパッケージとして配布したい単一のPythonスクリプトを持っています。それはインジケータUnityパネルにローカル日付を表示します。スクリプトまたはバイナリから .deb パッケージを作成するしかし、失敗したため、deb パッケージを作成できませんでした。

誰か、私に何をすべきかステップバイステップで説明してくれませんか? 私の知る限り、このスクリプトは に依存していますpython-appindicator

注記:
Debian/Ubuntu のパッケージング手順へのリンクは不要です。ほとんど見たことがあります。初心者には使いにくいと思います。

答え1

以下は、Python スクリプトのソース パッケージがどのようなものになるかを示した基本的な例です。パッケージ化チュートリアルのほとんどは少し複雑ですが、問題に遭遇したときに非常に役立ちます。とはいえ、私は最初、Debian パッケージを見るだけで Debian パッケージ化の基本を学びました。apt-get source似たようなものを見つけて、例から学びましょう。

基本的なソース パッケージのレイアウトは次のとおりです。

my-script/
    -- myScript
    -- debian/
        -- changelog
        -- copyright
        -- compat
        -- rules
        -- control
        -- install

dch --createディレクトリ内で実行して、適切にフォーマットされたdebian/changelogエントリを作成します。

debian/著作権次のようになります:

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: myScript
Upstream-Contact: Name, <email@address>

Files: *
Copyright: 2011, Name, <email@address>
License: (GPL-2+ | LGPL-2 | GPL-3 | whatever)
 Full text of licence.
 .
 Unless there is a it can be found in /usr/share/common-licenses

debian/互換次のようにもできます:7

debian/ルール:

#!/usr/bin/make -f

%:
    dh $@ --with python2

前に「タブ」がなければならないことに注意してください dh $@ --with python2スペースではなく を使用してください。

注意: Python2 は非推奨です。単一の Python ファイルの場合は、dh $@( なし--with python) のみで動作します。

debian/コントロール:

Source: my-script
Section: python
Priority: optional
Maintainer: Name, <email@address>
Build-Depends: debhelper (>= 7),
               python (>= 2.6.6-3~)
Standards-Version: 3.9.2
X-Python-Version: >= 2.6


Package: my-script
Architecture: all
Section: python
Depends: python-appindicator, ${misc:Depends}, ${python:Depends}
Description: short description
 A long description goes here.
 .
 It can contain multiple paragraphs

debian/インストール:

myScript usr/bin/

このファイルは、どのファイルがどのフォルダーにインストールされるかを示します。

さあ、作ってみましょうdebuild --no-tgz-check

これにより、機能的な deb パッケージが作成されます。Lintian は orig.tar.gz がないことに関する警告をいくつか表示しますが、tarball リリースを作成する適切なアップストリーム プロジェクトを作成する予定がない限り、今のところはそれを無視する方がよいでしょう。

答え2

  1. ホームに任意の名前のフォルダを作成します(例:mypyscript)
  2. フォルダを開き、「DEBIAN」と「usr」という名前の2つのフォルダを作成します。
  3. DEBIAN フォルダを開きます。そこに「control」という名前のテキスト ファイル (拡張子なし) を作成します。
  4. 「control」を開いて次のように入力し、DEBIANに保存します。

    Package: mypyscript
    Version: 0.01
    Architecture: all
    Maintainer: your name<your mail id>
    Installed-Size: 2
    Depends: python-appindicator
    Section: extras
    Priority: optional
    Homepage: your homepage
    Description: describe
    
  5. mypyscript という名前のフォルダに戻ります。「usr」を開きます。「bin」という名前のフォルダを作成します。「bin」を開いて、そこに pythonscript ファイルを貼り付けます。

  6. メニューエントリを作成することもできます。ただし、これは必須ではありません。
  7. フォルダ「mypyscript」があるホームフォルダに戻るか、ファイルブラウザを閉じます。
  8. ターミナルを開きます。ターミナルがホームフォルダにあることを確認してください。入力してdpkg -b mypyscriptEnterキーを押します。数秒でdebパッケージが準備されます。

注記:「control」ファイルを適切に入力してください。アポストロフィは使用しないでください。これは名前を示すためだけのものです。

答え3

.deb単一の Python 3 スクリプトからパッケージを作成する(2021 年更新)

この回答は他の回答に比べて長く見えるでしょう(そして実際長いです)。しかし、受け入れられた回答とは異なり、Python 3、そして2021年でも機能します。また、ページのようにすべての要件が含まれているため、多くの警告は生成されませんman

1 つの Python 3 スクリプトから Debian パッケージ (Ubuntu でも動作します) を作成する方法を説明します。まず、スクリプトを作成しましょう。これは単純な hello-world プログラムです。このファイルに という名前を付けますhello-world。それを というフォルダー内に置きますhello-world-1.0.0。そのhello-world-1.0.0フォルダーを という 2 番目のフォルダー内に置きますwork。ただし、ここでのディレクトリ構造は少々奇妙です。debuild(パッケージの構築に使用するツール) は、ファイルをビルドした場所から 1 つ上のディレクトリに配置するため.deb、ディレクトリ構造は次のようになります。

今後は、特に指定がない限り、あなたがディレクトリ内にいるものとみなしますwork/hello-world-1.0.0

work/
├─ hello-world-1.0.0/
│  ├─ hello-world

Debian ではパッケージ名にアンダースコアは使用できないため、ファイル名にはアンダースコアではなくハイフンを使用していることに注意してください。また、ファイル拡張子も省略しましたが、スクリプトの先頭にシェバンを追加したので問題ありません。

以下は、例として使用する Python スクリプトです。前述のとおり、名前はhello-world(ファイル拡張子なしで) です。

#!/usr/bin/env python3
def hello_world():
    print("Hello world!")

if __name__ == "__main__":
    hello_world()

見るこのStack Overflowの質問何のためにif __name__ = "__main__:"。シェバンは次のように含まれていますこの質問

まず、コードを実行して動作することを確認します。

$ chmod +x ./hello-world
$ ./hello-world
Hello world!

ファイルをビルドするには、、、、およびパッケージがインストールされている.deb必要があります。これらのパッケージの一部はプリインストールされていることgitは承知していますが、このガイドをDebian でも動作させたいので、ここに含めました。これらのコマンドを使用してインストールできます。devscriptsbuild-essentiallintianpandoc

sudo apt-get update
sudo apt-get install git devscripts build-essential lintian pandoc

フォルダ内にhello-world-1.0.0、 というフォルダを作成しますdebian。その中に、 というフォルダを作成しますsource。また、フォルダのすぐ内側に、、、、、、debianおよび というファイルを作成しますchangelog。フォルダcompat内に、というファイルを作成します。controlcopyrightinstallrulesdebian/sourceformat

ディレクトリツリーは次のようになります。

work/
├─ hello-world-1.0.0/
│  ├─ debian/
│  │  ├─ source/
│  │  │  ├─ format
│  │  ├─ changelog
│  │  ├─ compat
│  │  ├─ control
│  │  ├─ copyright
│  │  ├─ install
│  │  ├─ rules
│  ├─ hello-world

さて、これらのファイルの内容についてですが、hello-world-1.0.0フォルダー内に直接いると仮定します。

debian/source/format

ほとんど無視して構いませんが、もし疑問に思うなら、§5.22Debian ドキュメント内。

3.0 (native)

debian/changelog

このファイルにはプログラムの変更ログが含まれていますhello-world

hello-world (1.0.0) unstable; urgency=medium

    * Initial release:
 -- John Doe <[email protected]>  Sun, 28 Nov 2021 10:18:51 -0800

debian/compat

互換性レベルを設定しますdebhelper§5.2Debianのドキュメント

10

debian/control

aptこれは、ツールがパッケージを管理するために使用するさまざまな値を設定します。§4.1Debianのドキュメント

Source: hello-world
Section: python
Maintainer: John Doe <[email protected]>
Build-Depends: debhelper (>= 7),
               python3 (>= 3.5)
Standards-Version: 4.5.1
Priority: optional

Package: hello-world
Architecture: all
Section: python
Depends: python3 (>=3.5), ${misc:Depends}
Description: A simple hello-world program to demenstrate how to package a
 Python 3 script as a deb file

debian/copyright

このファイルには、ソースコードの著作権とライセンスに関する情報が含まれています。ここでは、コードはMITライセンスの下にあると想定しています。必要に応じて変更してください。§4.2Debianのドキュメント

Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/

Files: *
Copyright: 2021 John Doe <[email protected]>
License: MIT-License

Files: debian/*
Copyright: 2021 John Doe <[email protected]>
License: MIT-License

License: MIT-License
 MIT License
 .
 Copyright (c) 2021 John Doe
 .
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including without limitation the rights
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:
 .
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 .
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.

debian/install

このファイルはパッケージのどのファイルがどこにインストールされるかを制御します。§5.11Debianのドキュメント

hello-world usr/bin/
hello-world.1 usr/share/man/man1/

debian/rules

これはDebianがパッケージをビルドする方法です。§4.4Debian ドキュメントで。注意: 他の Makefile と同様に、インデントにはタブを使用してください。スペースは機能しません。

#!/usr/bin/make -f

%:
    dh $@

私たちの素敵なhello-worldパッケージにはページが必要ですman。しかし、マニュアル ページの形式は複雑で読みにくいです。そのため、代わりに、マニュアル ページを Markdown で記述し、pandoc変換できるようにします。

メイン ディレクトリ (つまり、フォルダーの直下hello-world-1.0.0) に、 というファイルを作成しますhello-world.1.md。ファイル内に次の内容を入力します。

% hello-world(1) hello-world 1.0.0
% John Doe
% November 2021

# NAME
hello-world - Prints a file until a null-character is reached

# SYNOPSIS
**hello-world** [*options*]

# DESCRIPTION
**hello-world** prints a file character-by-character until a null character is reached. The null character will not be printed

# OPTIONS

# EXAMPLES
**hello-world**
: Prints the text "Hello world!", followed by a newline, to the screen.

これとパッケージをビルドするには、いくつかの手順が必要です。そこで、代わりに (Bash) スクリプトを作成しましょう。 という名前のファイルを作成しますbuild。 を実行可能にしますchmod +x ./build。 ファイルに次の内容を入力します。

#!/usr/bin/env bash
pandoc hello-world.1.md -s -t man > hello-world.1
debuild --no-tgz-check -uc -us

これにより、マニュアル ページが生成され、 という名前のファイルに保存されますhello-world.1。その後、パッケージがビルドされます。 は-uc -us 、複雑なため GPG キーで署名しないことを意味します。 スクリプト ( ) を実行し./build、すべてがうまくいけば、親ディレクトリ に生成されたパッケージが作成されますwork

答え4

すぐにチェックしてください。簡単なアプリの作成やデブの生成に最適です。Googleで検索するか、ここでチュートリアルを見つけることができます。Ubuntu 16.04 以降

関連情報