Einführung:
Das Erweitern von Python mit C-Code erfordert eine sorgfältige Orchestrierung zwischen Kompilierungs- und Verknüpfungsschritten . Um diesen Prozess zu vereinfachen, bietet CMake eine bequeme Möglichkeit, solche Erweiterungen zu konfigurieren und zu erstellen. Allerdings hat die Integration von CMake mit setup.py die Entwickler vor Herausforderungen gestellt. Dieser Artikel zielt darauf ab, diese Herausforderungen anzugehen, indem er sich mit der Erweiterung von Setuptools befasst, um CMake nahtlos in setup.py-Builds zu verwenden.
Die Notwendigkeit der Integration:
Traditionell sind Python-Erweiterungen dies kompiliert und verknüpft, bevor setup.py ausgeführt wird, wodurch ein langwieriger zweistufiger Prozess entsteht. Durch die Nutzung von CMake erhalten Entwickler eine detaillierte Kontrolle über komplexe Build-Sequenzen. Darüber hinaus ermöglicht die Python-Erweiterungsunterstützung von CMake eine mühelose Kompilierung direkt aus setup.py, sodass keine Zwischenschritte erforderlich sind.
Anpassen von Build-Erweiterungen:
Um CMake in Setup zu integrieren .py, eine benutzerdefinierte Erweiterungsklasse ist erforderlich. Diese Unterklasse, CMakeExtension, überschreibt das Standard-Build-Verhalten, um stattdessen CMake-Befehle aufzurufen.
Beispielintegration:
Betrachten Sie eine einfache Projektstruktur, die eine C-Erweiterung (foo) enthält. und ein Python-Modul (spam.eggs). Die Dateien CMakeLists.txt und setup.py spielen eine entscheidende Rolle im Build-Prozess:
# 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()
Die CMakeExtension-Klasse registriert sich selbst als spezielle Erweiterung, die CMake nur während des Build-Prozesses aufruft, während die angepasste build_ext diese überschreibt Standardverhalten zum Aufrufen von CMake.
Testen des Builds:
Das Erstellen des Projekts erfordert das Ausführen von setup.py sdist bdist_wheel. Die resultierende Wheel-Distribution kann mit pip show installiert und getestet werden, um zu überprüfen, ob die Python-Erweiterungsbibliothek (libfoo.dylib) vorhanden ist. Der Aufruf der Wrapper-Funktion in spam.eggs bestätigt, dass die Erweiterung wie erwartet funktioniert.
Fazit:
Die Erweiterung von setuptools mit CMake in setup.py bietet einen optimierten Ansatz zum Erstellen Python-Erweiterungen, die für komplexe Build-Sequenzen auf CMake basieren. Es ermöglicht Entwicklern, diese beiden Tools nahtlos zu integrieren, manuelle Schritte zu reduzieren und den Entwicklungsworkflow zu verbessern.
Das obige ist der detaillierte Inhalt vonWie können Sie Python-Erweiterungs-Builds mithilfe von CMake in setup.py optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!