web-dev-qa-db-ja.com

Pythonプログラムを配布するためのDebianパッケージを作成する標準的な方法はありますか?

これを行う方法については多くの情報がありますが、「猫の皮をむくには複数の方法があります」、およびプロセスは、他のチュートリアルとは異なる特定の仮定を行っているように見えますが、私はまだそれを把握することができませんでした。

これまでのところ、これは私が理解したと思うことです。

  1. 私の最終目標は、「バイナリ」の.debパッケージを作成することです。すべてのPythonプログラムはそのようなものであるため、このようなパッケージはプラットフォームに依存しません(32/64ビット)。
  2. 「バイナリ」パッケージを作成するには、まずソースパッケージを作成する必要があります。
  3. ソースパッケージを作成するには、CDBSまたはdebhelperを使用できます。 Debhelperは初心者に推奨される方法です。
  4. ソースパッケージの作成の中心は、ソースディレクトリのDEBIANディレクトリに多数のファイルを追加することです。ファイルをコピーする必要がある場所、ファイルの著作権とライセンス体系、依存関係などを明確にします。 ...
  5. ステップ#4は、dh_makecommandifthe Python sourceにはdistutils 'setup.py 脚本。

今私の質問:

  1. プロセスについての私の理解は正しいですか?不足しているもの、または間違っているものはありますか?
  2. ステップ#5は、私にとって本当に混乱を招きます。具体的には、最もわかりにくい2つのポイントは次のとおりです。
    • setup.pyスタンドアロンプ​​ログラムをインストールするスクリプト?EDIT:Bystandalone program デスクトップユーザーが使用することを目的としたプログラム(moduleとは対照的に、後に他のソフトウェアが使用する機能のコレクションのように理解するプログラム)インポートされた)。私の特定のケースでは、実際にはtwoそのような「プログラム」が必要です。メインソフトウェアと別のユーティリティ(実質的に、もう一つの方)。
    • DEBパッケージ用のそのようなスクリプトの特異性は何ですか?公式ドキュメントはRPMとWindowsのもののみを扱っているようです...

ところで:これらは、私がこれまでに見つけた最高の情報源です。これよりも良いものがある場合は、共有してください! :)

69
mac

stdeb のようになります。

また、スクリプトをインストールする場合、 distributeのconsole_scripts エントリポイントサポートを強くお勧めします。

24
Ross Patterson

バリーワルシャワによるこの記事 は、このプロセスをかなりやり遂げるのに役立ちました。しかし、私はまだ側で多くの検索をしなければならなかった、と私は buntuパッケージングガイド 過去のある時間のほとんどを読みました。

良いsetup.pyは本当に良いアドバイスです。これら2つのガイドは非常に優れていることがわかりました。

9
metakermit

Debパッケージを構築する正しい方法はdpkg-buildpackageを使用することですが、時にはそれが少し複雑になることもあります。代わりにdpkg -b <folder>を使用すると、Debianパッケージが作成されます。

これらは、dpkg -b <folder>と任意のバイナリまたは手動コンパイルを必要とせずに自動的に実行される任意の種類のスクリプト(Python、Bash、Pearl、Ruby)で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/に1つのファイルのみを配置して、/usr/share/ProgramName/からスクリプトを呼び出します

  1. すべてのフォルダーのアクセス許可をルートに変更します。

    chown root:root -R /path/to/ProgramName-Version
    
  2. スクリプトのアクセス許可を変更します。

    chmod 0755 /path/to/the/script
    
  3. 最後に、実行できます:dpkg -b /path/to/the/ProgramName-Versionとdebパッケージが作成されます! (post/pre instスクリプトと必要なものすべてを追加することもできます。通常のDebianパッケージのように動作します)


controlファイルの例を次に示します。 「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.

必要なすべての手順を抽象化し、1つのコマンドでpythonパッケージをdebianパッケージに変換できるライブラリがいくつかあります。

pythonパッケージに既にsetup.pyが含まれている場合、setup.pyが配置されているディレクトリで、次のように使用できます。

  • stdeb (これについては既に言及している answerpip install stdebでインストール)。 debianパッケージを作成するには、次を実行します:

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

    出力.debファイルはbdist_debディレクトリにあります。

  • fpmgem install --no-ri --no-rdoc fpmでインストール)。 debianパッケージを作成するには、次を実行します:

    fpm -s python -t deb setup.py
    
  • py2debpip install py2debでインストール)。 debianパッケージを作成するには、次を実行します:

    py2deb -r . .
    

これらのライブラリにはそれぞれ独自の注意事項があるため、最適なものを試してみてください。

3
Jakub Kukul