サードパーティのライブラリと通信する、C で記述された複数の拡張モジュールを含む Python プロジェクトがあります。ただし、ユーザーの環境とオプションによっては、一部のモジュールをビルドしてはならず、一部のコンパイラ フラグを有効/無効にする必要があります。問題は、setup() を呼び出す前に拡張モジュールのリストを作成する必要があることです。理想的には、distutils.Command サブクラスを使用してユーザー オプションを処理したいと考えています。現在、いくつかのオプションがあります。
モジュールをビルドする前に「python setup.py configure」コマンドを実行する必要があり、情報を pickle ファイルに保存し、次にスクリプトを実行するときに拡張リストを生成するために使用します。これは、私のプロジェクトが現在どのように機能しているか、非常にばかげているようです。
オプションを sys.argv から手動でスクレイピングし、それらを使用してリストを作成します。最終的にはビルド前にいくつかのスクリプトを実行して設定を確認する必要があるため、これは長期的な解決策ではありません。
distutils から build_ext をサブクラス化し、run() メソッドの最初で構成を行い ((2) 経由で送信されたオプションも使用する可能性があります)、ビルドする前に self.distribution.ext_modules を直接変更します。ただし、 setup() が呼び出されたときに拡張モジュールのリストが修正されていると想定する可能性があるため、これにより setuptools が混乱する可能性があります。また、build_ext 以外のコマンドで setup() が呼び出された場合、拡張モジュールのリストが空であることも意味します。
これを行うための好ましい方法はありますか?