Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah anda boleh menyelaraskan binaan sambungan Python menggunakan CMake dalam setup.py?

Bagaimanakah anda boleh menyelaraskan binaan sambungan Python menggunakan CMake dalam setup.py?

Susan Sarandon
Susan Sarandonasal
2024-10-26 21:56:02264semak imbas

 How can you streamline Python extension builds using CMake within setup.py?

Mensubkelaskan Sambungan Binaan dengan CMake

Pengenalan:

Melanjutkan Python dengan kod C memerlukan orkestrasi yang teliti antara langkah penyusunan dan pemautan . Untuk memudahkan proses ini, CMake menyediakan cara yang mudah untuk mengkonfigurasi dan membina sambungan sedemikian. Walau bagaimanapun, penyepaduan CMake dengan setup.py telah menimbulkan cabaran kepada pembangun. Artikel ini bertujuan untuk menangani cabaran ini dengan mendalami meluaskan alatan persediaan untuk menggunakan CMake dengan lancar dalam binaan setup.py.

Keperluan untuk Integrasi:

Secara tradisinya, sambungan Python adalah disusun dan dipautkan sebelum menjalankan setup.py, mewujudkan proses dua langkah yang membosankan. Dengan memanfaatkan CMake, pembangun memperoleh kawalan terperinci ke atas jujukan binaan yang kompleks. Selain itu, sokongan sambungan Python CMake membolehkan penyusunan mudah terus daripada setup.py, menghapuskan keperluan untuk langkah perantaraan.

Menyesuaikan Sambungan Binaan:

Untuk menyepadukan CMake ke dalam persediaan .py, kelas sambungan tersuai diperlukan. Subkelas ini, CMakeExtension, menggantikan gelagat binaan lalai untuk menggunakan arahan CMake sebaliknya.

Contoh Integrasi:

Pertimbangkan struktur projek ringkas yang merangkumi sambungan C (foo) dan modul Python (spam.eggs). Fail CMakeLists.txt dan setup.py memainkan peranan penting dalam proses binaan:

# 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()

Kelas CMakeExtension mendaftarkan dirinya sebagai sambungan khas yang hanya memanggil CMake semasa proses binaan, manakala build_ext tersuai mengatasi tingkah laku lalai untuk menggunakan CMake.

Menguji Binaan:

Membina projek melibatkan menjalankan setup.py sdist bdist_wheel. Pengagihan roda yang terhasil boleh dipasang dan diuji menggunakan pip show untuk mengesahkan pustaka sambungan Python (libfoo.dylib) hadir. Memanggil fungsi pembungkus dalam spam.eggs mengesahkan bahawa sambungan berfungsi seperti yang diharapkan.

Kesimpulan:

Melanjutkan alat tetapan dengan CMake dalam setup.py menawarkan pendekatan yang diperkemas untuk membina Sambungan Python yang bergantung pada CMake untuk urutan binaan yang kompleks. Ia membolehkan pembangun menyepadukan kedua-dua alatan ini dengan lancar, mengurangkan langkah manual dan meningkatkan aliran kerja pembangunan.

Atas ialah kandungan terperinci Bagaimanakah anda boleh menyelaraskan binaan sambungan Python menggunakan CMake dalam setup.py?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn