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

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

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

전체 파이썬/C API에 대한 자세한 설명은 별도의 파이썬/C API 레퍼런스 설명서 를 참조하십시오.

## 권장 제삼자 도구

이 지침서는 이 버전의 CPython의 일부로 제공되는, 확장을 만들기 위한 기본 도구만을 다룹니다. Cython, cffi, SWIG 와 Numba 와 같은 제삼자 도구는 파이썬을 위한 C와 C++ 확장을 만드는 더 간단하고 세련된 접근법을 제공합니다.

더 보기

파이썬 패키징 사용자 지침서: 바이너리 확장

  파이썬 패키징 사용자 지침서는 바이너리 확장의 생성을 단순화하는 몇 가지 사용 가능한 도구를 다루고 있을 뿐만 아니라, 확장 모듈을 만드는 것이 왜 바람직한지 여러 가지 이유에 대해서도 논의합니다.

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

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

- 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. distutils로 C와 C++ 확장 빌드하기
  - 4.2. 확장 모듈 배포하기
- 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. 유닉스 계열 시스템에서 컴파일과 링크하기