15

コマンド ライン オプションが渡された場合にのみ、Python パッケージで (setuptools を使用して) 有効にしたい C 拡張機能を作成しました。これを行う最も簡単な方法は何ですか?

これについて簡単な方法を見つけることができないようです。

4

2 に答える 2

15

実際には、これに使用できる「機能」と呼ばれる配布/setuptools機能があります。これは、setup.pyがコマンドラインオプションに基づいてさまざまなことを実行するように明示的に設計されてい--with-xxxます。--without-xxx

  • このブログ投稿は素晴らしい紹介を提供します、私は現時点でこれ以上のドキュメントを見つけることができません(Distributeソース-Featureクラスfeaturesキーワードを除いて)。
  • jinjaプロジェクトのsetup.pyは、正確な目的のために機能を使用します。これは、作業に適したテンプレートである可能性があります。
  • simplejson setup.pyも同様のことを行いますが、それが定義するC拡張機能を常にビルドしようとし、ビルドが失敗した場合はpure-pythonに正常にフォールバックするようにコーディングされている点が異なります。これはあなたの目的にも役立つかもしれません。
于 2011-04-20T19:28:57.020 に答える
4
ext_modules = []
if '--add-this' in sys.argv:
    ext_modules.append(Extension(...))
    sys.argv.remove('--add-this')
setup(...
      ext_modules = ext_modules
)

これはハックですが、最も簡単かもしれません。より高度なアプローチは、Distribution クラスを拡張してフラグをサポートすることです。たとえば--with-modules、finalize_options 内の ext_modules をカスタマイズします。

于 2010-10-30T01:21:24.710 に答える