DebianパッケージがPyPIからPythonモジュールをインストールする方法


20

この質問は補完しようとすると、このいずれかを。PyPIのサードパーティモジュールを使用するpythonアプリがあります。アプリをdebianパッケージにパッケージ化したいが、debian / ubuntuリポジトリにないPython依存関係を処理する方法がわからない(debianパッケージとしてもパックされている)

解決策1:
PyPIからモジュールをdebianパッケージに直接ビルドします。

ソリューション#2:stdeb
使用して必要なすべてのPyPIモジュールのdebianパッケージを作成し、debian / ubuntuリポジトリに追加します。

debianパッケージをできればvirtualenvにインストールするときにPyPIの依存関係をインストールしたいので、実際にはソリューション3が必要です!

解決策3とは何ですか?DEBIAN / preinst メンテナースクリプトを調整する必要がありますか?


Debianパッケージを作成する必要がある理由を説明できますか?Pythonアプリに非Pythonリソースが必要ですか?
ジョナサン

@JonathanユーザーにUbuntu Software Centerからアプリをインストールしてもらいたい。そのためには* .debが必要だと思います。私のPythonアプリには、Python以外のリソースは必要なく、サードパーティのPythonモジュールだけが必要です。
andri_ch

@Jonathan Debianパッケージは、Ubuntuの標準インストール方法です。.debファイルを簡単に配布したり、プライベートリポジトリをセットアップしたり、LaunchpadでPPAをセットアップしたりできます。
メストレリオン14

回答:


20

Debian IRCチャンネルirc://irc.debian.org#debian-mentorsで何人かのメンテナーと話をして、まったく同じことを求めましたが、一般的なコンセンサスは次のとおりです。

解決策1:

単一のコードベースとしてソースファイルをコピーしてパッケージに依存関係を統合することは非常に嫌われています。依存関係、更新、バージョン管理などを処理するパッケージングシステムの目的に反します。

解決策3:

バイナリ(.deb)のインストール時に非Debianパッケージをオンザフライでダウンロードすることは重大なセキュリティリスクであり、間違いなく間違いです。を 抽出て依存関係を検査することさえできませんdeb。それらはインストール時にダウンロードおよびインストールされるためです。これは、リポジトリシステムを完全にバイパスするアプローチです。関係するユーザーは、背後で(そしてroot、覚えておいてください!)、信頼できないソースから追​​加の信頼できないソフトウェアをダウンロードするパッケージに満足しません。はい、それはDEBIAN/postinst(またはpreinst)をいじり、発行するwget(または、あなたの場合、pip install)、それがFlash、Oracle Java、Steamなどで採用されているアプローチです。しかし、それはプロプライエタリなクローズドソースソフトウェアですので、とにかくセキュリティはありません。

ソリューション#1.5:

あなたはそれを言及しなかったが、あなただけで依存関係を統合することができ、ビルド時に、すなわち、ソースパッケージ(.orig.tar.gz.debian.tar.gz.dsc「バイナリ」パッケージ(作成するときは、PyPIからダウンロードすることにより、トライアド).deb)。以下のための指示pip installに行くだろうdebian/rules(予告小文字debianバイナリパッケージとは反対に、)、そしてあなたが発行したときに実行されるだろうdebuilddpkg-buildpackage

これは、#1と#3の中間です。#3の問題のいくつかを軽減します(解決はしません!)。少なくとも最終製品を検査.debでき、インストール時にインターネットにアクセスする必要はありません。すべてのリスクと負担は最終ユーザーからパッケージメンテナーに移されます。しかし、ほとんどのパッケージングシステムインフラストラクチャをバイパスするため、#1と同じ問題があります。結局、依存関係(バージョン、更新、要件、競合)の処理が、dpkg/ aptが最初に作成された理由です!:)

解決策2:

一つの真の右ウェイ™。依存関係用のdebianパッケージを作成し、それらをパッケージの要件としてリストし、すべての.debsパッケージまたはソースパッケージを出荷します。

そこから、いくつかのオプションがあります。

  • あなたのソフトウェアとその依存関係の両方のソースパッケージをDebianに含めるために提出してください。受け入れられると、Ubuntuのようなすべての派生物を含め、すべてのDebianユーザーが自動的に利用できるようになります。

  • ソースパッケージをLaunchpadにアップロードして、Ubuntuユーザー(およびLinux Mintのような派生物)が簡単に追加およびインストールできるPPAを作成します

  • あなたのウェブサイトであなた自身のdebianリポジトリをホストしてください。Debianベースのシステムのユーザーが追加し/etc/apt/sources.list.daptインフラストラクチャを使用してダウンロード、インストール、更新を続けることができます(上記のように!)

  • .deb直接ダウンロードおよびインストールするファイルをホストします。いいえ、aptまたは自動更新が考えられました。

どのように(!あまりにも、あなたのpythonソフトウェア)あなたは、PyPIの依存関係をパッケージ化する、簡単なプロセスを作るツールと参照の数があります。

  • あなたが言ったように、stdeb。オールディーとグッディー。

  • Pybuildは、Debianに代わる新しい素晴らしいツールですstdeb

そして、多くの便利なリファレンス:

助けが必要?それらをチェックしてください:



2

ありpypi2debは、PyPIからパッケージを取得し、debパッケージにそれを作るために。


0

それらは、perlのcpanのようなものではありません。リポジトリにある場合はapt-getでインストールできますが、pipでインストールできない場合は、/ usr / localにpipをインストールする必要があります。

pipでインストールするには、次のようにします。

apt-get install python-pip 
pip install foopackage 

例えば:

pip install MultipartPostHandler2

これはOPの質問には答えません。問題は、DebianパッケージにPyPiからPythonパッケージをインストールして、 'apt-get <custom-package>'または 'dpkg -i <custom-package>'がPyPiからPythonの依存関係を引き出す方法です。
SevakPrime

それらは、perlのcpanのようではありません。リポジトリにある場合は、apt-getでインストールできます。pipでインストールできない場合は、/ usr / localにpipをインストールする必要がありますが、私の答えを削除した方が良い。
セルジオ

コメントは、OPの質問に対する適切な回答を提供します。そのコメントを回答に入れて、投票する必要があります。(たとえば、MestreLionの答えを参照してください。)現状のままでは、あなたの答えはOPの質問に答えません。
-SevakPrime
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.