포팅 및 플랫폼 지원¶
Python 인터프리터는 기반 플랫폼 – 운영 체제(예: Linux, Windows 또는 macOS), 프로세서(예: Intel/AMD, ARM), C 컴파일러와 라이브러리 및 기타 “하위 수준” 세부 사항 – 에서 실행됩니다.
CPython은 여러 플랫폼에서 공식적으로 지원되며, 코어 팀은 이러한 플랫폼에서 릴리스를 테스트하고 버그를 수정하는 데 필요한 충분한 지식과 자원을 갖추고 있습니다. 자세한 내용은 PEP 11을 참조하십시오.
다른 플랫폼은 코어 팀에서 지원하지 않지만, 자원봉사 프로젝트나 Python을 “자사” 시스템에서 사용하려는 회사 또는 일회성 실험을 통해 다른 주체가 지원할 수도 있습니다. 지원되지 않는 플랫폼용 코드를 기본 CPython 저장소에 병합하는 정책은 PEP 11을 참조하십시오.
포트 및 연락처¶
아래 표에는 관련 서드 파티 프로젝트와 해당 유지관리자, 그리고 플랫폼별 이슈를 트리아지할 때 관련된 정보의 링크가 나열되어 있습니다. 공식적으로 지원되는 플랫폼도 관련 정보가 있거나(PEP 11 이외의 정보), 유사한 플랫폼을 그룹화해야 하는 경우 포함됩니다.
유지관리자의 주의를 끌거나 플랫폼별 이슈에 대한 의견을 요청하기 위해 나열된 GitHub 사용자 이름을 @멘션해도 됩니다. 유지관리자는 반드시 본인의 허가를 받은 경우에만 목록에 올려야 하며, 언제든지 목록에서 자신을 삭제할 수 있습니다.
서드 파티 프로젝트는 유지관리자보다 훨씬 더 많은 사람에게 상당한 이점을 제공하는 경우에만 목록에 올려야 합니다.
링크는 플랫폼 자체가 아닌 해당 포트에 관한 것이어야 하며, 포팅 작업 및 플랫폼별 이슈 수정과 관련되어야 합니다(홈페이지/마케팅 링크 제외).
새 플랫폼으로 포팅하기¶
CPython을 완전히 새로운 플랫폼으로 이식하는 일은 모험입니다. 시도해 본다면 기록을 남기고 – 다른 사람에게 관련이 있을 만한 내용을 발견하면 이 가이드를 업데이트하는 것도 고려하십시오. 플랫폼마다 다르므로 이 가이드에서는 몇 가지 대략적인 팁만 제공할 수 있습니다.
첫 번째 단계는 해당 플랫폼의 개발 도구 체인, 특히 C 컴파일러에 익숙해지는 것입니다. 대상 컴파일러를 사용하여 hello-world 프로그램을 컴파일하고 실행할 수 있는지 확인하십시오.
다음으로, Python 인터프리터가 이미 이식된 플랫폼에서 이를 컴파일하고 실행하는 방법을 익히십시오. Unix가 바람직하지만 Windows도 괜찮습니다. Python의 빌드 과정, 특히 소스 배포판의 Makefile은 Python용으로 어떤 파일을 컴파일해야 하는지에 대한 단서를 제공합니다. 모든 소스 파일이 관련 있는 것은 아닙니다. 일부는 플랫폼별 파일이고, 다른 일부는 비상시에만 사용됩니다(예: Python/getopt.c).
대상 플랫폼에 관해 최소한 중간 수준의 이해, 즉 일반적인 사용 방법, 플랫폼별 앱을 작성하는 방법 등을 알지 못한 상태에서 Python 이식을 시작하는 것은 권장하지 않습니다. 또한 어느 정도의 Python 지식이 필요하며, 그렇지 않으면 이식본이 올바르게 작동하는지 확인할 수 없습니다.
UNIX 셸이 있는 시스템에서는 포함된 configure 스크립트를 실행하십시오. 그러면 Makefile 파일을 포함하여 필요한 모든 파일이 생성되어야 합니다. 그렇지 않다면 이를 디버깅하거나 다시 구현해야 합니다. 이 스크립트는 GNU Autotools를 사용하여 configure.ac 파일에서 생성된다는 점에 유의하십시오. (CPython은 재현성을 위해 특정 버전을 고정하지만, 다른 버전도 문제없이 작동할 수 있습니다.)
configure 프로그램이 생성하며 확인해 볼 만한 주요 파일은 다음과 같습니다.
플랫폼에 맞게 조정된
pyconfig.h파일입니다. 이 파일을 수동으로 만들어야 한다면 pyconfig.h.in 파일에서 시작하여 주석을 읽고 플랫폼에 적용되는 정의를 활성화하십시오.지원하는 내장 모듈을 나열하는
config.c파일입니다. 동적 확장 모듈 로딩이 작동할 때까지는 가져와야 하는 모든 컴파일된 모듈을 여기에 나열해야 합니다. 이 파일은 Modules/config.c.in 파일에서 생성됩니다.모든 요소를 하나로 구성하는 방법이 담긴
Makefile파일입니다. 이 파일이 생성되지 않으면 모든*.c파일을 컴파일하고 오류를 수정해 보거나 – 중요해 보이지 않는 파일은 제외하십시오. 예를 들어 처음에는posix모듈(Modules/posixmodule.c)을 신경 쓰지 마십시오. 이 모듈을 컴파일하지 말고config.c파일에서도 주석 처리하십시오.
>>> 프롬프트가 나타날 때까지 계속 작업하십시오. -S 옵션을 전달하여 site.py 가져오기를 비활성화해야 할 수도 있습니다. 프롬프트가 나타나면 아주 간단한 Python 문을 실행할 수 있을 때까지 이것저것 입력해 보십시오.
어느 시점에는 os 모듈을 사용하고 싶을 것입니다. 이때가 posix 모듈을 어떻게 처리할지 고민하기 시작할 때입니다. posix 모듈에서 문제를 일으키는 함수를 단순히 주석 처리해도 괜찮습니다. 나머지 함수는 상당히 유용할 것입니다. 물론 다른 모듈에도 같은 접근 방식을 사용할 수 있습니다.
작업을 마치기 전에 테스트 실행 및 작성 문서에 설명된 대로 Python 회귀 테스트 스위트를 실행할 것을 적극 권장합니다. 적절하지 않은 테스트는 건너뛰어야 할 가능성이 높습니다. 참고로 WASI 플랫폼에서 이를 어떻게 처리하는지 살펴보십시오.