Maison  >  Article  >  développement back-end  >  Comment l'extension setuptools peut-elle être améliorée pour permettre l'intégration de CMake dans un fichier setup.py Python ?

Comment l'extension setuptools peut-elle être améliorée pour permettre l'intégration de CMake dans un fichier setup.py Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 07:42:02832parcourir

How can setuptools Extension be enhanced to enable CMake integration within a Python setup.py file?

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 :

  1. 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.

  2. 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 :

  • Contrôle amélioré sur le processus de compilation et de liaison C/C
  • Possibilité d'exploiter les fonctionnalités étendues de CMake pour des configurations de build complexes
  • Optimisations potentielles des performances grâce à des paramètres de compilation affinés
  • Cohérence avec C/ Workflows de développement C qui utilisent CMake comme système de build

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn