擴展setuptools 擴展以在setup.py 中啟用CMake
簡介
構建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中文網其他相關文章!