PyPy 8.0.0 공개, 파이썬 3.12 베타 지원 시작

1분 PyPyPython 3.12C APIglibc
최근 30일 조회수 — 좋아요 —

핵심 요약

PyPy가 v8.0.0을 출시해 파이썬 3.12를 베타로 지원하고 CPython과의 C 헤더 호환성을 높였다.

PyPy 개발팀이 파이썬 2.7, 3.11, 3.12(베타)를 지원하는 v8.0.0을 2026년 9월 19일 공개했다. 5월 26일 이후 약 4개월 만의 메이저 릴리스이며, 3.12를 지원하는 첫 버전이라는 점에서 이번 버전을 "베타" 등급으로 부르고 있다고 PyPy 블로그는 밝혔다.

버전 번호가 8.0.0으로 크게 뛴 이유는 빌드 환경 변경 때문이다. PyPy는 리눅스 빌드봇(linux64, linux32, aarch64)을 manylinux_2_28 이미지 기반으로 옮겼는데, 이 이미지는 AlmaLinux 8과 glibc 2.28, gcc14를 쓴다. 기존에는 gcc5를 썼다. 그 결과 컴파일된 배포판이 최소 glibc 2.28을 요구하게 됐는데, 팀은 이 정도는 이미 널리 쓰이고 있다고 판단했다. 실제로 우분투 24.04는 glibc 2.39를 쓴다. 다만 이 변화로 기존 사용자가 혼동할 수 있어 메이저 버전을 올렸다고 팀은 설명했다.

이번 릴리스에서 가장 눈에 띄는 변화는 3.12 지원에 맞춘 C 레이어 구조 개편이다. PyPy는 내부 RPython 객체와 C 객체를 연결하기 위해 `PyObject` 구조체에 `ob_pypy_link`라는 별도 필드를 둔다. 이전 버전에서는 이 필드가 겉으로 드러나 있어 PyPy의 `PyObject` 구조체가 CPython 것과 달랐다. v8.0.0부터는 이 필드를 C 확장 모듈에 넘기는 포인터 앞쪽에 숨겨, `Py_LIMITED_API=0x030C0000`을 정의했을 때 PyPy의 C 헤더가 CPython 헤더와 호환되도록 만들었다. 또한 이전에는 `PyTuple_New` 같은 제한 API(limited API) 함수가 `PyPyTupleNew`처럼 이름이 바뀌어 노출됐는데, 이제는 함수 이름을 그대로 노출한다.

이 작업의 목표는 CPython 3.12용으로 만들어진 `cp312-abi3` 휠(wheel)을 PyPy에서도 그대로 쓸 수 있게 하는 것이다. 필요한 조각은 대부분 갖춰졌지만, 아직 두 가지가 남아 있다고 팀은 밝혔다. 하나는 import 메커니즘이 `abi3.so` 공유 객체를 PyPy에서 유효한 것으로 인식하도록 하는 작업이고, 다른 하나는 pip·uv 같은 패키징 생태계가 `cp312-abi3` 휠을 PyPy 설치 후보로 받아들이게 하는 작업이다. PyPy 팀은 이를 위해 Cython, PyO3 프로젝트와 협업 중이라고 밝혔으며, 이 변화가 완성되면 패키지들이 PyPy를 지원하기가 더 쉬워질 것으로 기대하고 있다.

내부 코드 생성 쪽에서도 변화가 있었다. PyPy 자체는 RPython으로 작성되는데, 이를 C로 변환하는 코드 생성 과정에서 계산된 goto(computed goto)를 쓰고 인라이닝을 더 적극적으로 적용했다. 다만 팀은 이 변경이 소스 코드를 더 간결하게 만들긴 했지만 기대했던 만큼 성능 향상으로 이어지지는 않았다고 인정했다. 대신 생성된 C 소스에 원본 RPython 코드 위치를 표시하는 주석을 넣어, 이후 최적화 작업에 도움이 되도록 했다.

이번 버전에서는 HPy 백엔드도 내부적으로 제거됐다. PyPy 팀은 HPy 프로젝트가 포인터 대신 핸들(handle)을 쓰는 방식을 제안한 좋은 프로토타입이었지만, 새로운 표준으로 자리잡을 만큼 지지를 얻지 못했다고 평가했다. 코드 자체는 저장소에 남아 있어 빌드 옵션으로 다시 켤 수 있다. 이 밖에 PyPy와 CPython의 헤더·익스포트 함수를 비교하는 clang 기반 도구 `pyhdrdump`도 다시 정비됐다.

v8.0.0은 PyPy2.7(CPython 2.7.18 기준 표준 라이브러리 포함), PyPy3.11(CPython 3.11.16 기준), PyPy3.12(CPython 3.12.14 기준) 세 인터프리터로 나온다. 세 인터프리터는 같은 코드베이스를 공유하기 때문에 한 번에 릴리스된다. 팀은 이번 릴리스가 3.11을 지원하는 마지막 버전이 될 것이라고 밝혔다.

\[^1]: PyPy Blog, "PyPy v8.0.0 release"

읽기 목록은 이 브라우저에 저장됩니다.

출처

  1. PyPy v8.0.0 release — PyPy Blog

이 글은 위 출처를 근거로 자동 생성된 뒤 발행됐습니다. 원문을 함께 확인해 주세요. 교차 보도 없이 단독 출처로 작성됐습니다.