setup.py で CMake を有効にするための setuptools 拡張機能
はじめに
Python のビルド時複雑なビルド プロセスのために C ライブラリと CMake に大きく依存する拡張機能の場合、デフォルトの setup.py スクリプトでは十分な柔軟性が得られない可能性があります。 CMake を setup.py ビルド プロセスに統合すると、コンパイルおよびリンク ステージの制御が大幅に強化され、より効率的でカスタマイズされたビルドが可能になります。
CMake を Setup.py に統合する
setuptools 拡張機能を拡張して CMake を活用するには、次の手順を実行できます:
build_ext コマンド クラスのオーバーライド:
build_ext を拡張します。 setup.py のコマンド クラスを使用して、拡張機能の構築プロセスをカスタマイズします。これにより、拡張モジュールを構成およびビルドするための CMake コマンドを組み込むことができます。
カスタム コマンド クラスの登録:
カスタマイズされた build_ext コマンド クラスを登録します。 setup.py の command_classes 辞書にあります。これにより、セットアップ プロセス中に拡張コマンドが使用可能になり、ビルドの一部として CMake を呼び出すことができるようになります。
実装例
次のコード例:
<code class="python">from setuptools import setup, Extension from setuptools.command.build_ext import build_ext class CMakeExtension(Extension): # override build_ext for this special extension def __init__(self, name): super().__init__(name, sources=[]) class build_ext(build_ext): def run(self): super().run() # build CMake extension for ext in self.extensions: self.build_cmake(ext) def build_cmake(self, ext): # build commands using CMake cwd = pathlib.Path().absolute() os.chdir(str(cwd)) self.spawn(['cmake', str(cwd)] + cmake_args) self.spawn(['cmake', '--build', '.'], shell=True) os.chdir(str(cwd)) setup( name='...', version='...', packages=['...'], ext_modules=[CMakeExtension('...')], cmdclass={ 'build_ext': build_ext, } )</code>
CMake を統合する利点
CMake を統合すると、Python 拡張機能を構築する際にいくつかの利点があります:
以上がsetuptools 拡張機能を拡張して、Python setup.py ファイル内で CMake 統合を有効にするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。