2017-08-28 19 views
0

私は、拡張モジュールのCコードを生成して文字列として返すPython関数を持っているとします。今私は実行時に、このCコードを.so/.pyd拡張モジュールにコンパイルして、インポートすることができます。実行時にPython拡張モジュールをコンパイルする

どうすればいいですか?

自体が単なる通常のPythonスクリプトなので、setuptoolsまたはdistutilsをこの目的で使用できるはずです。しかし、これらのパッケージは、インストールや依存関係のチェックなどに関連する余分なものがたくさんあります。単一の拡張モジュールをコンパイルするためのAPIフックはありますか?

答えて

0

PyStanプロジェクトの モジュールで、具体的にはpystan.modelモジュールに関連するコードが見つかりました。これは本質的に必要なものです。私は後世のためにここにコード断片を入れます。以下ではCython拡張も扱いますが、必要がない場合はCython依存関係を簡単に削除することができます。

from distutils.core import Extension 

import Cython 
from Cython.Build.Inline import _get_build_extension 
from Cython.Build.Dependencies import cythonize 

# you can add include_dirs= and extra_compile_args= here 
extension = Extension(name='mymodule', language='c++', sources=[srcfile]) 

build_extension = _get_build_extension() 
build_extension.extensions = cythonize([extension], 
             include_path=[], 
             quiet=False) 
build_extension.build_temp = os.path.dirname(srcfile) 
build_extension.build_lib = build_dir # where you want the output 

build_extension.run() 

はコンパイルしたら、パスにそれを入れて(またはsys.pathへのパスを追加)とimportlib.import_module()を呼び出すことにより、モジュールをロードすることができます。

関連する問題