私は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
- ホームに任意の名前のフォルダを作成します(例:mypyscript)
- フォルダを開き、「DEBIAN」と「usr」という名前の2つのフォルダを作成します。
- DEBIAN フォルダを開きます。そこに「control」という名前のテキスト ファイル (拡張子なし) を作成します。
「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
mypyscript という名前のフォルダに戻ります。「usr」を開きます。「bin」という名前のフォルダを作成します。「bin」を開いて、そこに pythonscript ファイルを貼り付けます。
- メニューエントリを作成することもできます。ただし、これは必須ではありません。
- フォルダ「mypyscript」があるホームフォルダに戻るか、ファイルブラウザを閉じます。
- ターミナルを開きます。ターミナルがホームフォルダにあることを確認してください。入力して
dpkg -b mypyscript
Enterキーを押します。数秒で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 でも動作させたいので、ここに含めました。これらのコマンドを使用してインストールできます。devscripts
build-essential
lintian
pandoc
sudo apt-get update
sudo apt-get install git devscripts build-essential lintian pandoc
フォルダ内にhello-world-1.0.0
、 というフォルダを作成しますdebian
。その中に、 というフォルダを作成しますsource
。また、フォルダのすぐ内側に、、、、、、debian
および というファイルを作成しますchangelog
。フォルダcompat
内に、というファイルを作成します。control
copyright
install
rules
debian/source
format
ディレクトリツリーは次のようになります。
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 以降