ネストされたPythonのC拡張機能/モジュール?
-
16-09-2019 - |
質問
どのように私はそれが別の地元であるようなC-Pythonモジュールをコンパイルするには?例えば。私は「バー」という名前のモジュールと「のmymodule」という名前の別のモジュールを持っている場合、それは「輸入mymodule.bar」?
を経由して輸入されるように、どのように私は、「bar」をコンパイルします(これは悪い言葉で表現されている場合申し訳ありませんが、私はそれのための適切な用語が何であったかわからなかった。)
私はsetup.pyで次のことを試してみましたが、動作していないよう:
from distutils.core import setup, Extension
setup(name='mymodule',
version='1.0',
author='Me',
ext_modules=[Extension('mymodule', ['mymodule-module.c']),
Extension('bar', ['bar-module.c'])])
編集
おかげでアレックス。だから、これは私が使用して終了するものである。
from distutils.core import setup, Extension
PACKAGE_NAME = 'mymodule'
setup(name=PACKAGE_NAME,
version='1.0',
author='Me',
packages=[PACKAGE_NAME],
ext_package=PACKAGE_NAME
ext_modules=[Extension('foo', ['mymodule-foo-module.c']),
Extension('bar', ['mymodule-bar-module.c'])])
もちろんフォルダという名前で "のmymodule" を含む__init__.py
ます。
解決
の指示ここのとおりです。
拡張子( 'foo' で、[ 'SRC / foo1.c'、 'SRC / foo2.c'])
に住んでいる拡張子を記述 ルートパッケージ、しばらく
拡張子( 'pkg.foo'、[ 'SRC / foo1.c'、 'SRC / foo2.c'])
で同じ拡張子を記述 PKGパッケージ。ソースファイルと オブジェクトコード得において同一であります どちらの場合も、唯一の違いは、 ここで、ファイルシステム内の(従って どこPythonの名前空間の階層内) 結果の拡張子が住んでいます。
パッケージは、常にモジュール__init__
を含むディレクトリ(またはzipファイル)で、覚えておいてください。パッケージ本体だモジュールを作成するには、そのモジュールは__init__
と呼ばれ、パッケージのディレクトリ(またはzipファイル)の下で暮らすことになります。私はCのそれをやったことがありません。それが直接それを行うには動作しない場合、モジュールなどに名前を付けます代わりに、そして_init
で__init__.py
はfrom _init import *
(from ... import *
の非常にいくつかの合法的な用途の一つを; - )行います。