PythonアプリケーションをDebianベースのオペレーティングシステム(DebianやElementary OSなど)にインストールできるようにする1つの方法は、dh_virtualenvツールを使用することです。 .debを構築します Python仮想環境をアプリケーションにラップし、インストール時にデプロイするパッケージ。
この記事では、仮想環境をアクティブ化せずにコマンドラインからHTTP APIをテストするために、HTTPieツールを含むパッケージを構築する例でそれを使用する方法を説明します。
dh_virtualenvを使用したパッケージ化
まず、dh_virtualenvに必要なツールをインストールする必要があります。 dh_virtualenvのドキュメントには、すべてのインストールオプションが記載されています。 Debianベースのシステムで、次のように入力しました:
apt-get install dh-virtualenv devscripts
devscriptsパッケージは必須ではありませんが、後続の操作を簡単に実行できます。
次に、ソースを保持するディレクトリを作成します。これはローカルの非公式なHTTPieのパッケージであるため、 myhttpと呼びました。 。次に、 myhttp内にいくつかのファイルを作成しましょう Debianビルドシステムにメタデータを提供します。
まず、 Debian / controlを作成します ファイル:
Source: myhttp
Section: python
Priority: extra
Maintainer: Jan Doe <[email protected]>
Build-Depends: debhelper (>= 9), python3.7, dh-virtualenv (>= 0.8)
Standards-Version: 3.9.5
Package: myhttp
Architecture: any
Pre-Depends: dpkg (>= 1.16.1), python3.7, ${misc:Pre-Depends}
Depends: ${misc:Depends}
Description: http client
Useful for doing stuff
では、このすべての情報は何ですか? Debianのドキュメントにあるように:
「1行目から7行目は、ソースパッケージの制御情報です。9行目から13行目は、バイナリパッケージの制御情報です。」
これが私の見解です:
- セクション 私たちの場合、価値はほとんど意味がありませんが、そこにある必要があります。ガイド付きUIインストーラーに情報を提供することには意味がありますが、このパッケージには関係ありません。
- 追加の優先度 値は、このようなサードパーティパッケージの正しい優先順位です。
- 実際の連絡先の詳細をメンテナに入力することを強くお勧めします 分野。ただし、個人の電子メールである必要はありません。たとえば、パッケージがチームによって保守されていて、問題が発生したい場合は、「インフラストラクチャチーム
」です。チームのメールエイリアスに送信されます。 - ビルド依存 フィールドは、パッケージをビルドするためにdebhelper、python、およびdh-virtualenvが必要であることを示します。パッケージビルドプロセスは、これらの依存関係がパッケージビルド時にインストールされることを確認します。
- 標準バージョン 主に人間が消費するためのものです。それはあなたがフォローしているガイドを示しています。このガイドは、Debianの3.9.5ガイドに基づくdh-virtualenvの公式ドキュメントに基づいています。ほとんどの場合、バイナリパッケージとソースパッケージに同じ名前を付けるのが最善の選択です。
- アーキテクチャ フィールドは任意である必要があります 仮想環境にはアーキテクチャ固有のファイルが含まれている可能性があるためです。それ以外の場合、フィールドはすべてとして選択する方が適切です。 。
- 事前依存を維持する 現状のままリスト:事前依存はかなり厳密な形式の依存関係であり、ここで提案されている最小値を超えるものが必要になることはめったにありません。依存関係は通常、ビルドシステムによって正確に計算されるため、手動で指定する必要はありません。
- パッケージの大部分が内部使用の場合、説明 最小限の情報と会社のwikiへのリンクのみを指定する場合があります。それ以外の場合は、詳細が役立つ可能性があります。
次に、 Debian / compatを作成します ファイル。主に歴史的な目的で存在します:
$ echo "9" > debian/compat
次に、変更ログを作成して、前回のリリース以降に何が変更されたかをパッケージユーザーに通知します。最も簡単な方法は、 dch --createを使用することです。 テンプレートを作成してから値を入力します。
記入すると、次のようになります:
myhttp (2.0.0-1) stable; urgency=medium
* Initial release.
-- Jan Doe <[email protected]> Fri, 27 Mar 2020 01:09:22 +0000
次に、ツールにHTTPieをインストールするように指示する必要がありますが、どのバージョンですか?
requireds.inを作成します 緩いバージョンのファイル:
httpie
一般に、緩い要件ファイルにはプロジェクトの直接の依存関係のみが含まれ、必要に応じて最小バージョンが指定されます。最小バージョンを指定する必要は必ずしもありません。ツールは通常、「可能な限り最新のバージョン」に向けて依存関係を強化する方向に偏っています。 Debianパッケージが1つの内部Pythonパッケージに対応している場合、内部アプリケーションの一般的なケースでは、緩い要件ファイルは同様に見えます。パッケージの名前が1行だけです。
次に、 pip-compileを使用します (これは、PyPIパッケージ pip-toolsをインストールすることで利用できます ):
$ pip-compile requirements.in > requirements.txt
これにより、 requirements.txtという厳密な依存関係ファイルが生成されます :
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile requirements.in
#
certifi==2019.11.28 # via requests
chardet==3.0.4 # via requests
httpie==2.0.0 # via -r requirements.in
idna==2.9 # via requests
pygments==2.6.1 # via httpie
requests==2.23.0 # via httpie
urllib3==1.25.8 # via requests
最後に、 Debian / rulesを記述します パッケージを作成するためのファイル。 dh_virtualenvがすべてのハードワークを実行するため、ルールファイルは単純です。
#!/usr/bin/make -f>
%:
dh $@ --with python-virtualenv --python /usr/bin/python3.7
必ずPythonインタープリターを指定してください。デフォルトでは、 / usr / bin / pythonのインタープリターを使用します 、Python 2ですが、サポートされているバージョンのPythonを使用する必要があります。
書き込みが終了しました。残っているのはパッケージをビルドすることだけです:
$ debuild -b -us -uc
その他のLinuxリソース
- Linuxコマンドのチートシート
- 高度なLinuxコマンドのチートシート
- 無料のオンラインコース:RHELの技術概要
- Linuxネットワーキングのチートシート
- SELinuxチートシート
- Linuxの一般的なコマンドのチートシート
- Linuxコンテナとは何ですか?
- 最新のLinux記事
これにより、親ディレクトリに myhttp_2.0.0-1_amd64.debのような名前のファイルが生成されます。 。このファイルは、互換性のある任意のオペレーティングシステムにインストールできます。
一般に、Debian10.0などの特定のプラットフォーム向けのDebianパッケージを同じプラットフォーム上に構築するのが最善です。
このDebianパッケージをリポジトリに保存し、Ansibleなどの関連するすべてのシステムにインストールできます。
Debianベースのオペレーティングシステム用のアプリケーションのパッケージ化は、複数のステップからなるプロセスです。 dh_virtualenvを使用すると、プロセスが簡単になります。