# 파이썬 인터프리터 확장 및 내장

이 문서는 새로운 모듈로 파이썬 인터프리터를 확장하기 위해 C 나 C++로 모듈을 작성하는 방법을 설명합니다. 이러한 모듈은 새로운 함수뿐만 아니라 새로운 객체 형과 메서드를 정의할 수 있습니다. 또한, 확장 언어로 사용하기 위해, 파이썬 인터프리터를 다른 응용 프로그램에 내장시키는 방법에 관해서도 설명합니다. 마지막으로, 하부 운영 체제에서 이 기능을 지원하는 경우, 동적으로 (실행시간에) 인터프리터에 로드될 수 있도록 확장 모듈을 컴파일하고 링크하는 방법을 보여줍니다.

이 문서는 파이썬에 대한 기본 지식을 전제로 합니다. 언어에 대한 형식적이지 않은 소개는 파이썬 자습서 를 보십시오. 파이썬 언어 레퍼런스 는 보다 형식적인 언어 정의를 제공합니다. 파이썬 표준 라이브러리 는 존재하는 객체 형, 함수 및 모듈(내장된 것과 파이썬으로 작성된 것 모두)을 설명하는데, 이것들이 언어의 응용 범위를 넓힙니다.

전체 파이썬/C API에 대한 자세한 설명은 별도의 Python/C API reference manual 를 참조하십시오.

## 권장 제삼자 도구

This guide only covers the basic tools for creating extensions provided as part of this version of CPython. Some third party tools offer both simpler and more sophisticated approaches to creating C and C++ extensions for Python.

## 제삼자 도구 없이 확장 만들기

지침서의 이 부문에서는 제삼자 도구의 도움 없이 C와 C++ 확장을 만드는 방법에 관해 설명합니다. 여러분 자신의 C 확장을 만드는 데 권장되는 방법이라기보다는, 주로 도구를 제작하는 사람들을 대상으로 합니다.

더 보기

PEP 489 – Multi-phase extension module initialization

- 1. C나 C++로 파이썬 확장하기
  - 1.1. 간단한 예
  - 1.2. 막간극: 에러와 예외
  - 1.3. 예제로 돌아가기
  - 1.4. 모듈의 메서드 테이블과 초기화 함수
  - 1.5. 컴파일과 링크
  - 1.6. C에서 파이썬 함수 호출하기
  - 1.7. 확장 함수에서 매개 변수 추출하기
  - 1.8. 확장 함수를 위한 키워드 매개 변수
  - 1.9. 임의의 값을 구축하기
  - 1.10. 참조 횟수
  - 1.11. C++로 확장 작성하기
  - 1.12. 확장 모듈을 위한 C API 제공하기
- 2. 확장형 정의하기: 자습서
  - 2.1. 기초
  - 2.2. 기초 예제에 데이터와 메서드 추가하기
  - 2.3. 데이터 어트리뷰트를 더 세밀하게 제어하기
  - 2.4. 순환 가비지 수거 지원하기
  - 2.5. 다른 형의 서브 클래싱
- 3. 확장형 정의하기: 여러 가지 주제
  - 3.1. 파이널리제이션과 할당 해제
  - 3.2. 객체 표현
  - 3.3. 어트리뷰트 관리
  - 3.4. 객체 비교
  - 3.5. 추상 프로토콜 지원
  - 3.6. 약한 참조 지원
  - 3.7. 추가 제안
- 4. C와 C++ 확장 빌드하기
  - 4.1. setuptools로 C와 C++ 확장 빌드하기
- 5. 윈도우에서 C와 C++ 확장 빌드하기
  - 5.1. 요리책 접근법
  - 5.2. 유닉스와 윈도우의 차이점
  - 5.3. DLL을 실제로 사용하기

## 더 큰 응용 프로그램에 CPython 런타임을 내장하기

때로는, 파이썬 인터프리터를 메인 응용 프로그램으로 사용하고 그 안에서 실행되는 확장을 만드는 대신, CPython 런타임을 더 큰 응용 프로그램에 내장하는 것이 바람직합니다. 이 절에서는 이를 성공적으로 수행하는 데 관련된 몇 가지 세부 사항에 관해 설명합니다.

- 1. 다른 응용 프로그램에 파이썬 내장하기
  - 1.1. 매우 고수준의 내장
  - 1.2. 매우 고수준 내장을 넘어서: 개요
  - 1.3. 순수한 내장
  - 1.4. 내장된 파이썬을 확장하기
  - 1.5. C++로 파이썬 내장하기
  - 1.6. 유닉스 계열 시스템에서 컴파일과 링크하기