2011-07-09 15 views
16

Python拡張モジュール用のsetup.pyスクリプトでヘッダファイルを指定するにはどうすればよいですか?ソースファイルを以下のようにリストしても機能しません。しかし、どこにリストするのかわかりません。Python拡張モジュールのsetup.pyスクリプトでヘッダファイルを指定する方法は?

from distutils.core import setup, Extension 
from glob import glob 

setup(
    name = "Foo", 
    version = "0.1.0", 
    ext_modules = [Extension('Foo', glob('Foo/*.cpp') + glob('Foo/*.h'))] 
) 
+0

むしろdistutils.coreよりsetuptoolsのをインポートしてみます。それから私はそれがヘッダーファイルを自動的にピックアップすると信じています。それがうまくいかない場合は、以下のようにMANIFEST.inを追加してください。 –

答えて

13

は、セットアップのほかMANIFEST.inファイルを追加します。以下の内容のpy:

graft relative/path/to/directory/of/your/headers/ 
+0

distutilsにインストールを指示しません。ヘッダーをインストールする必要はありません、コンパイラの入力としてのみ使用する必要があります。コンパイラによって生成されたpydファイルのみをインストールする必要があります – user763305

+2

いいえ、ホエイはインストールされません。 (setup.py sdist) –

+2

大変ですが、この単純なことをするためにマニフェストが必要なことに驚いています。 – user763305

3

私は正しいことを覚えていれば、ソースファイルを指定するだけで、ヘッダーを検索/使用する必要があるはずです。

セットアップツールのマニュアルで、私はこれについて何か信じています。 「たとえば、拡張子がinclude_dirsオプションを使用し、配布ルートの下に含まれるディレクトリにヘッダファイルを必要とする場合は、」

Extension('foo', ['foo.c'], include_dirs=['include']) 

http://docs.python.org/distutils/setupscript.html#preprocessor-options

+1

私はそれを試しました。それはヘッダーを見つけることができませんでした。 – user763305

+0

私は私の質問を編集し、それが動作するかどうかを確認します。 :) –

+0

試しext_modules = [Extension( 'Foo'、glob( 'Foo/*。cpp')、include_dirs = ['Foo'])]。動作しません;ヘッダーファイルはパッケージに追加されません。 – user763305

3

セットアップ()にヘッダーkwargを試してください。私はそれがどこに文書化されているか分からないが、それは動作する。

setup(name='mypkg', ..., headers=['src/includes/header.h']) 
+0

本当にうまくいくはずです。私は、文書が監督によって省略されたのか、それとも内部の細部になっていたのか分かりません。 –

+3

@ÉricAraujo:私はそれを試して、それは動作しませんでした。私は "setup.py sdist"を実行し、ヘッダーはFoo-0.1.0.zipに含まれていませんでした。 – user763305

+3

実際にはヘッダーは含まれていないと言うsdistコマンドのコードと、build_extの別のメモ(sdistがファイルリストの一部を作成するために使用するget_source_file関数を定義する)私たちがヘッダーファイルの名前も知っていればそれはきちんとしたものです。 distutilsは新機能に縛られています(私たちは今distutils2で作業しています)。しかし、私はこれをバグとみなし、Python 2.7と3.2の次のリリースで修正します。私は後でbugs.python.orgに関するレポートを開きます。 –

5

私はもうsetuptoolsにはそれほど面白くない面がありました。 ここで私は、ヘッダファイルを使って動作するソースディストリビューションを生成するための回避策を使わなければならなかったのです。私はpackage_dataを使用しました。

私はこれを共有しているため、他の誰かを悪化させる可能性があります。あなたがもっと良い解決策を知っているなら、私に教えてください。

詳細はこちらをご覧ください: https://bitbucket.org/blais/beancount/src/ccb3721a7811a042661814a6778cca1c42433d64/setup.py?fileviewer=file-view-default#setup.py-36

# A note about setuptools: It's profoundly BROKEN. 
    # 
    # - The header files are needed in order to distribution a working 
    # source distribution. 
    # - Listing the header files under the extension "sources" fails to 
    # build; distutils cannot make out the file type. 
    # - Listing them as "headers" makes them ignored; extra options to 
    # Extension() appear to be ignored silently. 
    # - Listing them under setup()'s "headers" makes it recognize them, but 
    # they do not get included. 
    # - Listing them with "include_dirs" of the Extension fails as well. 
    # 
    # The only way I managed to get this working is by working around and 
    # including them as "packaged data" (see {63fc8d84d30a} below). That 
    # includes the header files in the sdist, and a source distribution can 
    # be installed using pip3 (and be built locally). However, the header 
    # files end up being installed next to the pure Python files in the 
    # output. This is the sorry situation we're living in, but it works. 

私のOSSプロジェクトに対応するチケットがあります: https://bitbucket.org/blais/beancount/issues/72

関連する問題