誰かがC++のブーストライブラリに依存するPython(Cython)ライブラリをパッケージ化したいとします。Pythonパッケージ:従属ライブラリとしてのブースト
setup.py
を設定して、ブーストライブラリ(つまり、他のOSのUbuntuにapt-get install libboost-dev
など)をインストールする必要があることをユーザーに正しく伝えるようにするにはどうすればよいですか?あるいは、ブーストライブラリをpythonパッケージ配布物に含めるほうがよいでしょうか?
誰かがC++のブーストライブラリに依存するPython(Cython)ライブラリをパッケージ化したいとします。Pythonパッケージ:従属ライブラリとしてのブースト
setup.py
を設定して、ブーストライブラリ(つまり、他のOSのUbuntuにapt-get install libboost-dev
など)をインストールする必要があることをユーザーに正しく伝えるようにするにはどうすればよいですか?あるいは、ブーストライブラリをpythonパッケージ配布物に含めるほうがよいでしょうか?
質問は、より良い
よう頼まれ 外部ライブラリの依存関係を含む、Python拡張を配布するための最良の方法は何ですか。
これはバイナリホイールパッケージでの処理が優れています。
ソースコードのビルドとインストールに使用されるsetup.py
については、ユーザーは何も知る必要はありません。ユーザーはバイナリホイールパッケージをダウンロードしてインストールするだけで済みます。
ヘッダーファイルだけを含めても、ライブラリをビルドしてリンクする必要はないという問題は解決しません。また、バージョンの非互換性に関する問題も発生します。
だから、setup.py
はこれについて特別なことをする必要はなく、ライブラリが含まれている場合はプロジェクトのサブディレクトリとなるヘッダを見つける場所とリンクするライブラリを知る必要があります。
ドキュメンテーションには、ソースからビルドする方法についての説明が含まれている必要があります。ブーストが必要以上のもの(Pythonヘッダーファイル、適切なコンパイラなど)です。
auditwheelのようなツールは、バイナリホイールに外部ライブラリの依存関係をバンドルするため、エンドユーザーはパッケージを使用するためにライブラリをインストールする必要はありません。
バイナリのPython拡張を配布する場合はmanylinux、this demo projectも参照してください。
実行時にこれを検出する良い方法があるかどうかはわかりません。ブーストを使用する簡単なテストプログラムをコンパイルしてコンパイルが失敗したかどうかを確認してみてください。 – ngoldbaum
@ngoldbaum私はすでにこれをしています。問題は、ブーストのような外部依存関係を持つベストプラクティスに関するものです。要するに、ブーストライブラリをパッケージに含めますか(ヘッダーのみ)、Pythonパッケージのインストール中にユーザーにエラーを報告します。 – Zouzias
私はDannyの答えに同意します。ホイールが利用できない場合は、必要な外部ライブラリが利用できない場合には、あなたのsetup.pyからエラーが発生し、有用なエラーメッセージが表示されます。 – ngoldbaum