Extension de l'extension setuptools pour activer CMake dans setup.py
Introduction
Lors de la construction de Python extensions qui dépendent fortement des bibliothèques C et de CMake pour les processus de construction complexes, le script setup.py par défaut peut ne pas offrir une flexibilité suffisante. L'intégration de CMake dans le processus de génération setup.py peut améliorer considérablement le contrôle sur les étapes de compilation et de liaison, conduisant à des versions plus efficaces et personnalisées.
Intégration de CMake dans Setup.py
Pour étendre l'extension setuptools et exploiter CMake, les étapes suivantes peuvent être suivies :
Remplacer la classe de commande build_ext :
Étendre la classe build_ext classe de commande dans setup.py pour personnaliser le processus de création d'extension. Cela permet l'incorporation de commandes CMake pour configurer et créer des modules d'extension.
Enregistrement de la classe de commande personnalisée :
Enregistrez la classe de commande build_ext personnalisée dans le dictionnaire command_classes de setup.py. Cela rend la commande étendue disponible pendant le processus d'installation, permettant à CMake d'être invoqué dans le cadre de la construction.
Exemple d'implémentation
Considérez le exemple de code suivant :
<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>
Avantages de l'intégration de CMake
L'intégration de CMake offre plusieurs avantages pour la création d'extensions Python :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!