この質問は this one を補完しようとします。 PyPIのサードパーティモジュールを使用するpythonアプリがあります。アプリをdebianパッケージにパッケージ化したいが、debian/ubuntuリポジトリにないpython依存関係を処理する方法がわからない(debianパッケージとしてもパックされている)
ソリューション#1:
モジュールをPyPIからdebianパッケージに直接ビルドします。
ソリューション#2:
stdebを使用して必要なすべてのPyPIモジュールのdebianパッケージを作成し、debian/ubuntuリポジトリに追加します。
DebianパッケージをできればvirtualenvにインストールするときにPyPIの依存関係をインストールしたいので、実際にはSolution#3が必要です!
Solution#3とは何ですか? DEBIAN/preinstメンテナースクリプトを微調整する必要がありますか?
Debian IRCチャンネルでメンテナーと話をしました irc://irc.debian.org#debian-mentors 、まったく同じことを求めて、一般的なコンセンサスを求めましただった:
ソリューション#1:
単一のコードベースとしてソースファイルをコピーしてパッケージに依存関係を統合することは、veryに難色を示します。依存関係、更新、バージョニングなどを処理するパッケージングシステムの目的に反します。
ソリューション#3:
バイナリ(.deb
)のインストール時に非Debianパッケージをオンザフライでダウンロードすることは、重大なセキュリティリスクであり、間違いなくノーです。インストール時にダウンロードおよびインストールされるため、deb
を抽出して依存関係をinspectすることさえできません。これは、リポジトリシステムを完全にバイパスするアプローチです。関係のあるユーザーは、背後で(そしてroot
として覚えてください!)、信頼できないソースから追加の信頼できないソフトウェアをダウンロードするパッケージに満足しません。はい、それはDEBIAN/postinst
(またはpreinst
)をいじる必要があり、wget
(または、あなたの場合はpip install
)を発行する必要があります。しかし、それはプロプライエタリなクローズドソースソフトウェアですので、とにかくセキュリティはありません。
ソリューション#1.5:
あなたはそれについて言及しませんでしたが、build time、つまりsourceパッケージ( .orig.tar.gz
、.debian.tar.gz
、.dsc
triad)、「バイナリ」パッケージ(.deb
)を作成するときにPyPiからダウンロードする。 pip install
の命令はdebian/rules
に入り(バイナリパッケージではなく、小文字のdebian
に注意してください)、debuild
またはdpkg-buildpackage
を発行すると実行されます。
これは、#1と#3の中間です。 #3の問題のいくつかを軽減します(しかし解決しません!):少なくとも最終製品を検査でき、.deb
はインストール時にインターネットアクセスを必要としません。すべてのリスクと負担は最終ユーザーからパッケージメンテナーに移されます。しかし、ほとんどのパッケージングシステムインフラストラクチャをバイパスするため、#1と同じ問題があります。結局、依存関係(バージョン、更新、要件、競合)の処理が、最初にdpkg
/apt
が作成された理由です! :)
ソリューション#2:
One True Right Way™。依存関係用のDebianパッケージを作成し、パッケージ内の要件としてリストし、すべての.debs
またはソースパッケージを出荷します。
そこから、いくつかのオプションがあります。
Submit Debianに含めるソースパッケージ(ソフトウェアとその依存関係の両方)。受け入れられると、Ubuntuのようなすべての派生物を含め、すべてのDebianユーザーが自動的に利用できるようになります。
ソースパッケージを Launchpad にアップロードして、 PPA を作成します。これにより、すべてのUbuntuユーザー(およびLinux Mintなどの派生物)が簡単に追加およびインストールできます。
Debianベースのシステムのユーザーが/etc/apt/sources.list.d
に追加し、apt
インフラストラクチャを使用してダウンロード、インストール、更新を継続できるように、Webサイトで独自のdebianリポジトリをホストします(上記のように!)
.deb
ファイルをホストして、直接ダウンロードしてインストールします。 apt
も自動更新も考慮されていません。
PyPi依存関係(およびpythonソフトウェアも!)をパッケージ化するhowについては、プロセスを簡単にする多くのツールとリファレンスがあります。
そして、多くの便利なリファレンス:
助けが必要?それらをチェックしてください:
Pypiからパッケージを取得してdebパッケージにするpypi2deb
があります。
関連するコマンドラインコードを.debパッケージのpostinstスクリプトに追加するだけでよいと思います。 この回答 にあり、詳細は debian公式ガイド にあります。
それらはそうではありません。Perlのcpanに似ています。リポジトリにある場合はapt-getでインストールできますが、pipでインストールできない場合は/ usr/localにpipをインストールする必要があります。
Pipでインストールするには、次のようにします。
apt-get install python-pip
pip install foopackage
例えば:
pip install MultipartPostHandler2