소개:
C 코드로 Python을 확장하려면 컴파일 단계와 연결 단계를 신중하게 조정해야 합니다. . 이 프로세스를 단순화하기 위해 CMake는 이러한 확장을 구성하고 빌드하는 편리한 방법을 제공합니다. 그러나 CMake를 setup.py와 통합하는 것은 개발자에게 어려움을 안겨주었습니다. 이 문서의 목표는 setup.py 빌드에서 CMake를 원활하게 사용하기 위해 setuptool을 확장하여 이러한 문제를 해결하는 것입니다.
통합의 필요성:
전통적으로 Python 확장은 다음과 같습니다. setup.py를 실행하기 전에 컴파일하고 링크하면 지루한 2단계 프로세스가 생성됩니다. CMake를 활용하면 개발자는 복잡한 빌드 시퀀스를 세밀하게 제어할 수 있습니다. 또한 CMake의 Python 확장 지원을 통해 setup.py에서 직접 쉽게 컴파일할 수 있으므로 중간 단계가 필요하지 않습니다.
빌드 확장 사용자 정의:
CMake를 설정에 통합하려면 .py, 사용자 정의 확장 클래스가 필요합니다. 이 하위 클래스인 CMakeExtension은 대신 CMake 명령을 호출하도록 기본 빌드 동작을 재정의합니다.
통합 예:
C 확장(foo)을 포함하는 간단한 프로젝트 구조를 고려하세요. 및 Python 모듈(spam.eggs). CMakeLists.txt 및 setup.py 파일은 빌드 프로세스에서 중요한 역할을 합니다.
# 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()
CMakeExtension 클래스는 빌드 프로세스 중에 CMake만 호출하는 특수 확장으로 자체 등록하는 반면, 사용자 정의된 build_ext는 CMake를 호출하는 기본 동작.
빌드 테스트:
프로젝트 빌드에는 setup.py sdist bdist_wheel 실행이 포함됩니다. 결과 휠 배포판은 pip show를 사용하여 설치하고 테스트하여 Python 확장 라이브러리(libfoo.dylib)가 있는지 확인할 수 있습니다. spam.eggs에서 래퍼 함수를 호출하면 확장 프로그램이 예상대로 작동하는지 확인할 수 있습니다.
결론:
setup.py에서 CMake를 사용하여 setuptools를 확장하면 빌드에 대한 간소화된 접근 방식을 제공합니다. 복잡한 빌드 시퀀스를 위해 CMake를 사용하는 Python 확장입니다. 이를 통해 개발자는 이 두 도구를 원활하게 통합하여 수동 단계를 줄이고 개발 워크플로우를 향상할 수 있습니다.
위 내용은 setup.py 내에서 CMake를 사용하여 Python 확장 빌드를 어떻게 간소화할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!