RPM としてパッケージ化およびデプロイする必要があるスクリプト/モジュールで構成される Python アプリケーションがいくつかあります。
ややこしいのは、各アプリケーションをすべての Python モジュールの依存関係と共に配布する必要があることです。これらは、システム全体にインストールされているものよりも優先して使用する必要があります。
これらの RPM の一部のターゲット ホストは、ネットワーク アクセスが制限されているため、RPM には、デプロイ時に何かをダウンロードするのではなく、アプリの実行に必要なすべてが含まれている必要があります。
virtualenvのパッケージ化と配布を見てきましたが、virtualenvの再配置は十分にサポートされていないようです。
zc.buildoutを見てきましたが、ドキュメントが不足していることがわかりました。開発中に依存関係をダウンロードする方法はわかりましたが、より大きなアプリケーションの一部としてそれらを配布する方法はわかりませんでした。異なるアプリが同じモジュールの異なるバージョンを必要とする可能性があるため、これらをシステム全体にインストールしないでください。
もう 1 つの問題点は、アプリ内のすべての Python スクリプトを変更して、開発中と展開後に別の sys.path を使用する必要があることです。これを回避する明確な方法がわかりませんでした。
これを達成するための最善の方法についての提案はありますか? 開発者の観点からのワークフローの理想的な要約は次のようになります。
- アプリケーションのソースをダウンロード
- スクリプトを実行して、存在しない場合は特定のモジュールの依存関係を取得します (おそらくpipを使用)
- スクリプトを実行して Python アプリをビルドし、それとダウンロードしたすべての依存関係を RPM にパッケージ化します。
最終的な RPM は、ネットワーク アクセスがなく、Python インタープリターのみがインストールされているホストでインストールおよび実行できる必要があります。