Introduction :
L'extension de Python avec du code C nécessite une orchestration minutieuse entre les étapes de compilation et de liaison . Pour simplifier ce processus, CMake fournit un moyen pratique de configurer et de créer de telles extensions. Cependant, l'intégration de CMake avec setup.py a posé des défis aux développeurs. Cet article vise à relever ces défis en approfondissant l'extension des outils de configuration pour utiliser de manière transparente CMake dans les versions setup.py.
Le besoin d'intégration :
Traditionnellement, les extensions Python sont compilé et lié avant d'exécuter setup.py, créant un processus fastidieux en deux étapes. En tirant parti de CMake, les développeurs bénéficient d'un contrôle précis sur les séquences de construction complexes. De plus, la prise en charge des extensions Python de CMake permet une compilation sans effort directement à partir de setup.py, éliminant ainsi le besoin d'étapes intermédiaires.
Personnalisation des extensions de build :
Pour intégrer CMake dans la configuration .py, une classe d'extension personnalisée est nécessaire. Cette sous-classe, CMakeExtension, remplace le comportement de construction par défaut pour appeler des commandes CMake à la place.
Exemple d'intégration :
Considérons une structure de projet simple qui inclut une extension C (foo) et un module Python (spam.eggs). Les fichiers CMakeLists.txt et setup.py jouent un rôle crucial dans le processus de construction :
# CMakeLists.txt project(spam) set(src "spam") set(foo_src "spam/foo.c") add_library(foo SHARED ${foo_src}) # setup.py from setuptools import setup, Extension from setuptools.command.build_ext import build_ext_orig class CMakeExtension(Extension): def __init__(self, name): super().__init__(name, sources=[]) class build_ext(build_ext_orig): def run(self): for ext in self.extensions: self.build_cmake(ext) super().run()
La classe CMakeExtension s'enregistre comme une extension spéciale qui appelle CMake uniquement pendant le processus de construction, tandis que le build_ext personnalisé remplace le comportement par défaut pour appeler CMake.
Test de la construction :
La construction du projet implique d'exécuter setup.py sdist bdist_wheel. La distribution de roues résultante peut être installée et testée à l'aide de pip show pour vérifier que la bibliothèque d'extension Python (libfoo.dylib) est présente. L'appel de la fonction wrapper dans spam.eggs confirme que l'extension fonctionne comme prévu.
Conclusion :
L'extension de setuptools avec CMake dans setup.py offre une approche simplifiée de la création Extensions Python qui s'appuient sur CMake pour les séquences de construction complexes. Il permet aux développeurs d'intégrer ces deux outils de manière transparente, réduisant ainsi les étapes manuelles et améliorant le flux de travail de développement.
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!