파이썬 3.12의 새로운 기능¶
- 편집기:
Adam Turner
이 문서는 파이썬 3.11과 비교하여 파이썬 3.12에 도입된 새로운 기능들을 설명합니다. 파이썬 3.12는 2023년 10월 2일에 출시되었습니다. 자세한 내용은 변경 로그 를 참조하십시오.
더 보기
PEP 693 – 파이썬 3.12 출시 일정
요약 – 릴리스 하이라이트¶
파이썬 3.12는 파이썬 프로그래밍 언어의 안정 버전이며, 언어와 표준 라이브러리에 여러 변경 사항이 포함되어 있습니다. 라이브러리 변경 사항은 폐기된 API 정리, 사용성 및 정확성에 중점을 두고 있습니다. 특히, distutils 패키지가 표준 라이브러리에서 제거되었습니다. os 및 pathlib 의 파일 시스템 지원 기능이 개선되었으며, 여러 모듈의 성능이 향상되었습니다.
언어 관련 변경 사항은 사용성에 중점을 두고 있으며, f-문자열 의 많은 제한이 해제되었고 ‘Did you mean …’ 제안 기능이 지속적으로 개선되고 있습니다. 새로운 타입 파라미터 구문 및 type 문은 정적 타입 검사기에서 제네릭 유형 및 타입 별칭 을 사용할 때의 편의성을 향상시킵니다.
이 문서는 모든 새 기능에 대한 완전한 명세를 제공하기보다는 편리한 개요를 제공합니다. 자세한 내용은 라이브러리 참조 및 언어 참조 와 같은 문서들을 참조하십시오. 특정 변경 사항의 전체 구현과 설계 근거를 이해하려면 해당 기능에 대한 PEP를 참조하십시오. 단, PEP는 기능이 완전히 구현된 후에는 최신 상태로 유지되지 않는 경우가 많으니 주의하시기 바랍니다.
새로운 문법 기능:
새로운 문법 기능:
인터프리터 개선 사항:
PEP 669, 낮은 영향의 모니터링
NameError,ImportError및SyntaxError예외에 대한 Improved ‘Did you mean …’ suggestions ``
파이썬 데이터 모델 개선:
표준 라이브러리의 중요한 개선 사항:
pathlib.Path클래스가 이제 서브클래싱을 지원합니다.os모듈이 Windows 지원과 관련하여 여러 개선 사항을 반영했습니다.sqlite3모듈에 커맨드라인 인터페이스 가 추가되었습니다.runtime-checkable 프로토콜에 대한isinstance()확인 속도가 2배에서 최대 20배 향상되었습니다.asyncio패키지가 여러 성능 개선을 거쳤으며, 일부 벤치마크에서는 75%의 속도 향상을 보였습니다.uuid모듈에 커맨드라인 인터페이스 가 추가되었습니다.
보안 개선 사항:
내장된
hashlib의 SHA1, SHA3, SHA2-384, SHA2-512 및 MD5 구현을 HACL* 프로젝트에서 제공하는 공식 검증 코드로 대체합니다. 이러한 내장된 구현은 OpenSSL이 이를 제공하지 않을 때만 사용되는 대체 수단으로 남아 있습니다.
C API 개선 사항:
CPython 구현 개선 사항:
PEP 709, 컴프리헨션 인라이닝
Linux
perf프로파일러를 위한 CPython 지원지원되는 플랫폼에서 스택 오버플로 방지 기능을 구현합니다.
새로운 타이핑 기능:
PEP 698,
@typing.override데코레이터
중요한 폐지, 제거 또는 제한 사항:
PEP 623: 파이썬 C API의 유니코드 객체에서
wstr을 제거하여 모든str객체의 크기를 최소 8바이트 줄입니다.PEP 632:
distutils패키지를 제거합니다. 제공되던 API를 대체하는 방법에 대한 조언은 마이그레이션 가이드 를 참조하십시오. Python 3.12 이상 버전에서도 해당 기능이 필요한 경우, 서드파티 Setuptools 패키지가 계속해서distutils를 제공합니다.gh-95299:
venv로 생성된 가상 환경에setuptools를 미리 설치하지 마십시오. 이는distutils,setuptools,pkg_resources,easy_install을 더 이상 기본적으로 사용할 수 없음을 의미합니다. 이 기능들에 접근하려면 활성화된 가상 환경에서pip install setuptools를 실행하십시오.The
asynchat,asyncore, andimpmodules have been removed, along with severalunittest.TestCasemethod aliases.
새로운 기능¶
PEP 695: 타입 파라미터 구문¶
PEP 484 에 따른 제네릭 클래스와 함수는 타입 파라미터의 범위를 불분명하게 만들고 변이(variance)를 명시적으로 선언해야 하는 번거로운 구문을 사용하여 정의되었습니다.
PEP 695 은 더 간결하고 명확한 방식으로 제네릭 클래스 및 함수 를 생성하는 방법을 도입합니다.
def max[T](args: Iterable[T]) -> T:
...
class list[T]:
def __getitem__(self, index: int, /) -> T:
...
def append(self, element: T) -> None:
...
또한, 이 PEP는 type 문을 사용하여 타입 별칭 를 선언하는 새로운 방법을 도입하며, 이는 TypeAliasType 의 인스턴스를 생성합니다.
type Point = tuple[float, float]
타입 별칭은 제네릭 일 수도 있습니다.
type Point[T] = tuple[T, T]
새 구문을 사용하면 TypeVarTuple 및 ParamSpec 파라미터뿐만 아니라 경계(bound)나 제약 조건이 있는 TypeVar 파라미터를 선언할 수 있습니다.
type IntFunc[**P] = Callable[P, int] # ParamSpec
type LabeledTuple[*Ts] = tuple[str, *Ts] # TypeVarTuple
type HashableSequence[T: Hashable] = Sequence[T] # 경계가 있는 TypeVar
type IntOrStrSequence[T: (int, str)] = Sequence[T] # 제약 조건이 있는 TypeVar
이 구문을 통해 생성된 타입 별칭의 값과 타입 변수의 경계 및 제약 조건은 필요할 때에만 평가됩니다(참고: 지연 평가). 이는 타입 별칭이 파일 내에서 나중에 정의되는 다른 유형을 참조할 수 있음을 의미합니다.
타입 파라미터 목록을 통해 선언된 타입 파라미터는 해당 선언의 범위와 중첩된 모든 스코프 내에서는 보이지만, 외부 스코프에서는 인식되지 않습니다. 예를 들어, 제네릭 클래스의 메서드에 대한 형식 주석이나 클래스 본문 내에서는 사용할 수 있지만, 클래스가 정의된 후 모듈 스코프에서 사용할 수는 없습니다. 타입 파라미터의 런타임 시맨틱에 대한 자세한 설명은 타입 매개변수 목록 를 참조하십시오.
이러한 범위(scoping) 시맨틱을 지원하기 위해 새로운 종류의 스코프인 어노테이션 스코프 가 도입됩니다. 어노테이션 스코프는 대부분 기능과 유사하게 동작하지만, 감싸고 있는 클래스 스코프와 상호작용하는 방식이 다릅니다. Python 3.13에서는 어노테이션 또한 어노테이션 스코프에서 평가됩니다.
자세한 내용은 PEP 695 를 참조하십시오.
(Eric Traut가 PEP을 작성했습니다. Jelle Zijlstra, Eric Traut 및 기타 인원들이 gh-103764 에서 구현을 담당했습니다.)
PEP 701: f-문자열의 구문 공식화¶
PEP 701 은 f-문자열 사용에 대한 일부 제한을 해제합니다. 이제 f-문자열 내부의 표현식 구성 요소는 포함된 f-문자열과 동일한 따옴표를 사용하는 문자열, 여러 줄의 표현식, 주석, 백슬래시 및 유니코드 이스케이프 시퀀스를 포함하여 모든 유효한 파이썬 표현식이 될 수 있습니다. 이를 자세히 살펴보겠습니다.
따옴표 재사용: Python 3.11에서 포함된 f-문자열과 동일한 따옴표를 재사용하면
SyntaxError가 발생하여 사용자가 다른 가용한 따옴표를 사용해야만 했습니다(예를 들어, f-문자열이 단일 따옴표를 사용하는 경우 이중 따옴표나 삼중 따옴표를 사용). Python 3.12에서는 다음과 같이 수행할 수 있습니다.>>> songs = ['Take me back to Eden', 'Alkaline', 'Ascensionism'] >>> f"This is the playlist: {", ".join(songs)}" 'This is the playlist: Take me back to Eden, Alkaline, Ascensionism'
이 변경 전에는 f-문자열을 중첩하는 방식에 대한 명시적인 제한은 없었으나, f-문자열의 표현식 구성 요소 내에서 문자열 따옴표를 재사용할 수 없다는 사실 때문에 f-문자열을 임의로 중첩하는 것이 불가능했습니다. 실제로 다음과 같은 형태가 작성 가능한 가장 깊게 중첩된 f-문자열입니다.
>>> f"""{f'''{f'{f"{1+1}"}'}'''}""" '2'
이제 f-문자열이 표현 구성 요소 내에 유효한 파이썬 표현식을 포함할 수 있으므로, f-문자열을 임의로 중첩하는 것이 가능해졌습니다.
>>> f"{f"{f"{f"{f"{f"{1+1}"}"}"}"}"}" '2'
여러 줄 표현식 및 주석: Python 3.11에서 f-문자열 내의 표현식이 원래 여러 줄에 걸쳐 나타날 수 있는 경우(예를 들어, 여러 줄에 걸쳐 정의되는 리터럴 목록)에도 f-문자열 표현식은 단일 줄로 정의되어야 했으므로 가독성이 떨어졌습니다. Python 3.12에서는 여러 줄에 걸친 f-문자열을 정의하고 인라인 주석을 추가할 수 있습니다.
>>> f"This is the playlist: {", ".join([ ... 'Take me back to Eden', # My, my, those eyes like fire ... 'Alkaline', # Not acid nor alkaline ... 'Ascensionism' # Take to the broken skies at last ... ])}" 'This is the playlist: Take me back to Eden, Alkaline, Ascensionism'백슬래시 및 유니코드 문자: Python 3.12 이전에는 f-문자령 표현식에
\문자를 포함할 수 없었습니다. 이는 이전에 f-문자열의 표현 구성 요소의 일부가 될 수 없었던\N부분을 포함하는 유니코드 이스케이프 시퀀스 (예:\N{snowman})에도 영향을 미쳤습니다. 이제 다음과 같이 표현식을 정의할 수 있습니다.>>> print(f"This is the playlist: {"\n".join(songs)}") This is the playlist: Take me back to Eden Alkaline Ascensionism >>> print(f"This is the playlist: {"\N{BLACK HEART SUIT}".join(songs)}") This is the playlist: Take me back to Eden♥Alkaline♥Ascensionism
자세한 내용은 PEP 701 을 참조하십시오.
이 기능이 구현된 방식(문자열 파싱 시 PEG 파서 사용)에 따른 긍정적인 부수 효과로, 이제 f-문자열에 대한 에러 메시지가 더 정확해졌으며 오류의 정확한 위치를 포함합니다. 예를 들어, Python 3.11에서는 다음 f-문자열이 SyntaxError 를 발생시켰습니다.
>>> my_string = f"{x z y}" + f"{1 + 1}"
File "<stdin>", line 1
(x z y)
^^^
SyntaxError: f-string: invalid syntax. Perhaps you forgot a comma?
그러나 당시 에러 메시지는 해당 줄 내의 정확한 오류 위치를 포함하지 않았으며 표현식이 인위적으로 괄호로 둘러싸여 있었습니다. Python 3.12에서는 f-문자열이 PEG 파서로 분석되므로, 에러 메시지가 더 정확해지고 전체 줄을 표시합니다.
>>> my_string = f"{x z y}" + f"{1 + 1}"
File "<stdin>", line 1
my_string = f"{x z y}" + f"{1 + 1}"
^^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
(Pablo Galindo, Batuhan Taskaya, Lysandros Nikolaou, Cristián Maureira-Fredes, Marta Gómez가 gh-102856 에서 기여했습니다. PEP은 Pablo Galindo, Batuhan Taskaya, Lysandros Nikolaou, Marta Gómez가 작성했습니다.)
PEP 684: 인터프리터별 GIL¶
PEP 684 은 인터프리터별 GIL 을 도입하여, 이제 서브 인터프리터를 생성할 때 각 인터프리터마다 고유한 GIL이 부여되도록 합니다. 이를 통해 파이썬 프로그램이 다중 CPU 코어를 최대한 활용할 수 있습니다. 이 기능은 현재 C-API를 통해서만 가능하지만, 파이썬 API는 3.13 버전에서 도입될 예정입니다.
자체적인 GIL을 가진 인터프리터를 생성하려면 새로운 Py_NewInterpreterFromConfig() 함수를 사용하십시오.
PyInterpreterConfig config = {
.check_multi_interp_extensions = 1,
.gil = PyInterpreterConfig_OWN_GIL,
};
PyThreadState *tstate = NULL;
PyStatus status = Py_NewInterpreterFromConfig(&tstate, &config);
if (PyStatus_Exception(status)) {
return -1;
}
/* 새 인터프리터가 현재 스레드에서 활성화됩니다. */
인터프리터별 GIL을 가진 서브 인터프리터를 위해 C-API를 사용하는 방법에 대한 자세한 예제는 Modules/_xxsubinterpretersmodule.c 를 참조하십시오.
(Eric Snow가 gh-104210 등에서 기여했습니다.)
PEP 669: CPython을 위한 낮은 영향력의 모니터링¶
PEP 669 은 프로파일러, 디버거 및 기타 도구가 CPython의 이벤트를 모니터링할 수 있는 새로운 API 를 정의합니다. 여기에는 호출(calls), 반환(returns), 라인, 예외, 점프 등 광범위한 이벤트가 포함됩니다. 이는 사용한 기능에 대해서만 비용을 지불함을 의미하며, 거의 없는 오버헤드로 디버거 및 커버리지 도구를 지원합니다. 자세한 내용은 sys.monitoring 을 참조하십시오.
(Mark Shannon이 gh-103082 에서 기여했습니다.)
PEP 688: 파이썬에서 버퍼 프로토콜을 사용할 수 있게 함¶
PEP 688 은 파이썬 코드에서 버퍼 프로토콜 을 사용하는 방법을 도입합니다. __buffer__() 메서드를 구현하는 클래스는 이제 버퍼 유형으로 사용할 수 있습니다.
새로운 collections.abc.Buffer ABC는 예를 들어 형식 주석에서 버퍼 객체를 표현하는 표준 방식을 제공합니다. 새로운 inspect.BufferFlags 열거형(enum)은 버퍼 생성을 사용자 정의하기 위해 사용되는 플래그를 나타냅니다. (Jelle Zijlstra가 gh-102500 에서 기여했습니다.)
PEP 709: 컴프리헨션 인라이닝¶
딕셔너리, 리스트, 세트 컴프리헨션은 이제 매 실행마다 단일 사용 함수 객체를 생성하는 대신 인라인 처리됩니다. 이를 통해 컴프리헨션의 실행 속도가 최대 두 배까지 빨라집니다. 자세한 내용은 PEP 709 를 참조하십시오.
컴프리헨션 반복 변수는 독립된 상태를 유지하며 외부 스코프에서 동일한 이름의 변수를 덮어쓰지 않고, 컴프리헨션이 끝난 후에도 보이지 않습니다. 인라이닝으로 인해 몇 가지 눈에 띄는 동작 변화가 발생합니다.
트레이스백에서 컴프리헨션을 위한 별도의 프레임이 더 이상 생성되지 않으며, 트레이싱/프로파일링 시에도 컴프리헨션이 함수 호출로 표시되지 않습니다.
symtable모듈은 더 이상 각 컴프리헨션에 대해 하위 심볼 테이블을 생성하지 않습니다. 대신, 컴프리헨션의 지역 변수가 부모 함수의 심볼 테이블에 포함됩니다.컴프리헨션 내부에서
locals`를 호출하면 이제 컴프리헨션 외부의 변수들이 포함되며, 더 이상 컴프리헨션 '인자'를 위한 합성된 `().0`` 변수가 포함되지 않습니다.locals()``를 직접 반복하는 컴프리헨션(예: ``[k for k in locals()])은 트레이싱(예: 코드 커버리지 측정) 환경에서 실행될 때 “RuntimeError: dictionary changed size during iteration”을 발생시킬 수 있습니다. 이는 이미for k in locals():등에서 확인된 것과 동일한 동작입니다. 이 오류를 방지하려면 먼저 반복할 키의 리스트를 생성하십시오:keys = list(locals()); [k for k in keys].
(Carl Meyer와 Vladimir Matveev가 PEP 709 에서 기여했습니다.)
에러 메시지 개선¶
이제 최상위 레벨에서
NameError가 발생할 때 인터프리터가 표시하는 에러 메시지의 일부로 표준 라이브러리의 모듈이 제안될 수 있습니다. (Pablo Galindo가 gh-98254 에서 기여했습니다.)>>> sys.version_info Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'sys' is not defined. Did you forget to import 'sys'?
인스턴스에 대한
NameError예외의 에러 제안을 개선했습니다. 이제 메서드 내에서NameError가 발생하고 인스턴스가 예외의 이름과 정확히 일치하는 속성을 보유한 경우, 제안 내용에 메서드 범위 내의 가장 유사한 매칭 대신self.<NAME>이 포함됩니다. (Pablo Galindo가 :gh:`99139 에서 기여했습니다.)>>> class A: ... def __init__(self): ... self.blech = 1 ... ... def foo(self): ... somethin = blech ... >>> A().foo() Traceback (most recent call last): File "<stdin>", line 1 somethin = blech ^^^^^ NameError: name 'blech' is not defined. Did you mean: 'self.blech'?
사용자가
from y import x대신import x from y를 입력할 때 발생하는SyntaxError메시지를 개선했습니다. (Pablo Galindo가 gh-98931 에서 기여했습니다.)>>> import a.y.z from b.y.z Traceback (most recent call last): File "<stdin>", line 1 import a.y.z from b.y.z ^^^^^^^^^^^^^^^^^^^^^^^ SyntaxError: Did you mean to use 'from ... import ...' instead?
실패한
from <module> import <name>문에서 발생하는ImportError예외에 이제<module>내에서 사용 가능한 이름을 기반으로 한<name>의 값 제안이 포함됩니다. (Pablo Galindo가 gh-91058 에서 기여했습니다.)>>> from collections import chainmap Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: cannot import name 'chainmap' from 'collections'. Did you mean: 'ChainMap'?
기타 언어 변경 사항¶
이제 파서가 널 바이트를 포함하는 소스 코드를 분석할 때
SyntaxError를 발생시킵니다. (Pablo Galindo가 gh-96670 에서 제공함.)유효한 이스케이프 시퀀스가 아닌 역 슬래시 문자 쌍이 이제
DeprecationWarning대신SyntaxWarning을 생성합니다. 예를 들어,re.compile("\d+\.\d+")는 이제SyntaxWarning을 발생시킵니다("\d"은 유효하지 않은 이스케이프 시퀀스이며, 정규 표현식에는 raw 문자열을 사용하십시오:re.compile(r"\d+\.\d+")). 향후 파이썬 버전에서는SyntaxWarning대신 최종적으로SyntaxError가 발생하게 됩니다. (Victor Stinner가 gh-98401 에서 제공함.)파이썬 3.11에서 지원이 중단된
0o377보다 큰 값을 가진 8진수 이스케이프(예:"\477")는 이제DeprecationWarning대신SyntaxWarning을 생성합니다. 향후 파이썬 버전에서는 최종적으로SyntaxError가 발생하게 됩니다. (Victor Stinner가 gh-98401 에서 제공함.)컴프리헨션의 타겟 부분에서 저장되지 않는 변수들이 이제 할당 표현식(
:=)에 사용될 수 있습니다. 예를 들어,[(b := 1) for a, b.prop in some_iter]에서b에 대한 할당이 허용됩니다. 주의할 점은 PEP 572 에 따라 컴프리헨션 타겟 부분에서 저장되는 변수(예:a)에 할당하는 것은 여전히 금지된다는 것입니다. (Nikita Sobolev가 gh-100581 에서 제공함.)클래스 또는 타입의
__set_name__메서드에서 발생한 예외가 더 이상RuntimeError로 감싸지지 않습니다. 컨텍스트 정보는 PEP 678 노트로 예외에 추가됩니다. (Irit Katriel이 gh-77757 에서 제공함.)try-except*구조가 전체ExceptionGroup을 처리하고 다른 하나의 예외를 발생시킬 때, 해당 예외는 더 이상ExceptionGroup으로 감싸지지 않습니다. 이 변경 사항은 3.11.4 버전에서도 적용되었습니다. (Irit Katriel이 gh-103590 에서 제공함.)가비지 컬렉터(Garbage Collector)가 이제 객체 할당 대신 파이썬 바이트코드 평가 루프의 eval breaker 메커니즘에서만 실행됩니다. 또한
PyErr_CheckSignals()가 호출될 때도 GC가 실행될 수 있으므로, 파이썬 코드를 실행하지 않고 장시간 실행되어야 하는 C 확장 프로그램도 주기적으로 GC를 실행할 기회를 얻게 됩니다. (Pablo Galindo가 gh-97922 에서 제공함.)불리언 매개변수를 기대하는 모든 내장 및 확장 호출 가능 객체(callable)가 이제
bool및int뿐만 아니라 모든 타입의 인자를 수용합니다. (Serhiy Storchaka가 gh-60203 에서 제공함.)memoryview가 이제 half-float 타입(형식 코드 “e”)을 지원합니다. (Donghee Na와 Antoine Pitrou가 gh-90751 에서 제공함.)slice객체가 이제 해시 가능(hashable)해져서 딕셔너리 키나 집합 항목으로 사용할 수 있습니다. (Will Bradshaw, Furkan Onder, 그리고 Raymond Hettinger가 gh-101264 에서 제공함.)sum()이 이제 부동 소수점 수나 정수와 부동 소수점 수가 섞인 경우를 합산할 때 정확도와 교환성을 개선하기 위해 Neumaier summation을 사용합니다. (Raymond Hettinger가 gh-100425 에서 제공함.)ast.parse()가 이제 널 바이트를 포함하는 소스 코드를 분석할 때ValueError대신SyntaxError를 발생시킵니다. (Pablo Galindo가 gh-96670 에서 제공함.)tarfile의 추출 메서드와shutil.unpack_archive()에 목적지 디렉토리 외부에 파일을 생성하는 것과 같이 당혹스럽거나 위험할 수 있는 tar 기능을 제한할 수 있는 새로운 filter 인자가 추가되었습니다. 자세한 내용은 tarfile extraction filters 를 참조하십시오. 파이썬 3.14에서 기본값은'data'로 변경됩니다. (Petr Viktorin이 PEP 706 에서 제공함.)types.MappingProxyTypeinstances are now hashable if the underlying mapping is hashable. (Contributed by Serhiy Storchaka in gh-87995.)새로운 환경 변수
PYTHONPERFSUPPORT및 명령줄 옵션-X perf를 통한 perf 프로파일러 지원 과 새로운sys.activate_stack_trampoline(),sys.deactivate_stack_trampoline(), 그리고sys.is_stack_trampoline_active()함수들을 추가했습니다. (Pablo Galindo가 설계하고, Pablo Galindo와 Christian Heimes가 Gregory P. Smith [Google], Mark Shannon과 함께 gh-96123 에서 제공함.)
새로운 모듈¶
없음.
개선된 모듈¶
배열¶
The
array.arrayclass now supports subscripting, making it a generic type. (Contributed by Jelle Zijlstra in gh-98658.)
asyncio¶
The performance of writing to sockets in
asynciohas been significantly improved.asyncionow avoids unnecessary copying when writing to sockets and usessendmsg()if the platform supports it. (Contributed by Kumar Aditya in gh-91166.)이벤트 루프에서 즉시 실행(eager task execution)을 선택하여 일부 유즈케이스를 2~5배 더 빠르게 만들 수 있도록 하는
asyncio.eager_task_factory()및asyncio.create_eager_task_factory()함수를 추가했습니다. (Jacob Bower & Itamar Oren이 gh-102853, gh-104140, gh-104138 에서 제공함.)리눅스에서,
asyncio는os.pidfd_open()이 사용 가능하고 정상 작동하는 경우asyncio.ThreadedChildWatcher대신 기본적으로asyncio.PidfdChildWatcher를 사용합니다. (Kumar Aditya가 gh-98024 에서 기여함.)이벤트 루프는 이제 각 플랫폼에서 사용 가능한 최상의 자식 감시자(
asyncio.PidfdChildWatcher가 지원되면 이를, 그렇지 않으면asyncio.ThreadedChildWatcher를 사용)를 사용하므로 자식 감시자를 수동으로 구성하는 것은 권장되지 않습니다. (Kumar Aditya가 gh-94597 에서 기여함.)asyncio.run()에 커스텀 이벤트 루프 팩토리를 지정할 수 있도록 loop_factory 매개변수를 추가했습니다. (Kumar Aditya가 gh-99388 에서 기여함.)asyncio.current_task()의 속도를 4~6배 향상시키기 위해 C 구현을 추가했습니다. (Itamar Oren과 Pranav Thulasiram Bhat이 gh-100344 에서 기여함.)asyncio는 이전의 제너레이터 기반 코루틴을 지원하지 않으므로,asyncio.iscoroutine()은 이제 제너레이터에 대해False를 반환합니다. (Kumar Aditya가 gh-102748 에서 기여함.)asyncio.wait()과asyncio.as_completed()이 이제 태스크를 생성하는 제너레이터를 수용합니다. (Kumar Aditya가 gh-78530 에서 기여함.)
calendar¶
연도의 월과 요일을 정의하는 열거형인
calendar.Month및calendar.Day를 추가했습니다. (Prince Roshan이 gh-103636 에서 기여함.)
csv¶
reader및writer객체에 의해None과 빈 문자열을 더 세밀하게 제어할 수 있도록csv.QUOTE_NOTNULL및csv.QUOTE_STRINGS플래그를 추가했습니다.
dis¶
Pseudo instruction opcodes (which are used by the compiler but do not appear in executable bytecode) are now exposed in the
dismodule.HAVE_ARGUMENTis still relevant to real opcodes, but it is not useful for pseudo instructions. Use the newdis.hasargcollection instead. (Contributed by Irit Katriel in gh-94216.)Add the
dis.hasexccollection to signify instructions that set an exception handler. (Contributed by Irit Katriel in gh-94216.)
fractions¶
fractions.Fraction타입의 객체가 이제 부동 소수점 스타일 형식을 지원합니다. (Mark Dickinson이 gh-100161 에서 기여함.)
importlib.resources¶
importlib.resources.as_file()이 이제 리소스 디렉터리를 지원합니다. (Jason R. Coombs가 gh-97930 에서 기여함.)importlib.resources.files()의 첫 번째 매개 변수를 anchor 로 변경합니다. (Jason R. Coombs이 gh-100598 에서 기여했습니다.)
inspect¶
Add
inspect.markcoroutinefunction()to mark sync functions that return a coroutine for use withinspect.iscoroutinefunction(). (Contributed by Carlton Gibson in gh-99247.)비동기 제너레이터의 현재 상태를 파악하기 위한
inspect.getasyncgenstate()및inspect.getasyncgenlocals()를 추가했습니다. (Thomas Krennwallner가 gh-79940 에서 기여함.)inspect.getattr_static()의 성능이 상당히 향상되었습니다. 이 함수를 호출하는 대부분의 경우가 Python 3.11보다 최소 2배 더 빠릅니다. (Alex Waygood이 gh-103193 에서 기여함.)
itertools¶
마지막 배치가 나머지보다 짧을 수 있는 경우 동일한 크기의 튜플로 수집하는
itertools.batched()를 추가했습니다. (Raymond Hettinger가 gh-98363 에서 기여함.)
math¶
곱들의 합을 계산하는
math.sumprod()를 추가했습니다. (Raymond Hetinger가 gh-100485 에서 기여함.)math.nextafter()를 확장하여 한 번에 여러 단계씩 위나 아래로 이동할 수 있는 steps 인자를 포함하도록 했습니다. (Matthias Goergens, Mark Dickinson, 그리고 Raymond Hettinger가 gh-94906 에서 기여함.)
os¶
os.pidfd_open()을 사용하여 프로세스의 파일 기술자를 비차단(non-blocking) 모드로 열 수 있도록 하는os.PIDFD_NONBLOCK을 추가했습니다. (Kumar Aditya가 gh-93312 에서 기여함.)os.DirEntry에 해당 항목이 연결점(junction)인지 확인하는os.DirEntry.is_junction()메서드가 추가되었습니다. (Charles Machalow가 gh-99547 에서 기여함.)Windows에서 드라이브, 볼륨 및 탑재 지점을 열거하는
os.listdrives(),os.listvolumes(),os.listmounts()함수를 추가했습니다. (Steve Dower가 gh-102519 에서 기여함.)os.stat()과os.lstat()이 이제 Windows에서 더 정확하게 동작합니다.st_birthtime필드에 파일 생성 시간이 채워지며,st_ctime은 폐지(deprecated)되었으나 여전히 생성 시간을 포함합니다(향후 다른 플랫폼과의 일관성을 위해 마지막 메타데이터 변경 시점을 반환할 예정입니다).st_dev는 파일 시스템에 따라 최대 64비트,st_ino는 최대 128비트가 될 수 있으며,st_rdev는 잘못된 값 대신 항상 0으로 설정됩니다. 두 함수 모두 최신 Windows 버전에서 상당히 빨라질 수 있습니다. (Steve Dower가 gh-99726 에서 기여함.)
os.path¶
주어진 경로가 연결점(junction)인지 확인하는
os.path.isjunction()을 추가했습니다. (Charles Machalow가 gh-99547 에서 기여함.)os.path.splitroot()를 추가하여 경로를(drive, root, tail)의 세 부분으로 나눌 수 있게 했습니다. (Barney Gale이 gh-101000 에서 기여함.)
pathlib¶
pathlib.PurePath및pathlib.Path와 그들의 POSIX 및 Windows 전용 변형의 서브클래싱을 지원합니다. 서브클래스는 경로 인스턴스 간 정보를 전달하기 위해pathlib.PurePath.with_segments()메서드를 재정의할 수 있습니다.os.walk()과 유사하게 디렉터리 트리를 순회하며 그 안에 있는 모든 파일 또는 디렉터리 이름을 생성하는pathlib.Path.walk()를 추가했습니다. (Stanislav Zmiev가 gh-90385 에서 기여함.)pathlib.PurePath.relative_to()에 결과에..항목을 포함할 수 있도록 하는 walk_up 선택적 매개변수를 추가했습니다. 이 동작은os.path.relpath()와 더 일관성이 있습니다. (Domenico Ragusa가 gh-84538 에서 기여함.)os.path.isjunction()의 프록시로pathlib.Path.is_junction()을 추가했습니다. (Charles Machalow가 gh-99547 에서 기여함.)pathlib.Path.glob(),pathlib.Path.rglob()및pathlib.PurePath.match()에 경로의 대소문자 구분 여부를 매칭하는 case_sensitive 선택적 매개변수를 추가하여 매칭 프로세스를 더 정밀하게 제어할 수 있도록 했습니다.
platform¶
Windows 11 및 2012 이후의 Windows Server 릴리스를 감지하는 기능을 추가했습니다. 이전에는 Windows Server 2012보다 최신인 Windows Server 플랫폼이나 Windows 11에서 조회를 수행하면
Windows-10을 반환했습니다. (Steve Dower가 gh-89545 에서 기여함.)
pdb¶
디버그 세션에서 값을 일시적으로 보유하고 현재 프레임이나 반환 값과 같은 값에 빠르게 접근할 수 있는 편의 변수들을 추가했습니다. (Tian Gao가 gh-103693 에서 기여함.)
random¶
random.binomialvariate()를 추가했습니다. (Raymond Hettinger가 gh-81620 에서 기여함.)random.expovariate()에 기본값lambd=1.0을 추가했습니다. (Raymond Hettinger가 gh-100234 에서 기여함.)
shutil¶
shutil.make_archive()가 이제 이를 지원하는 사용자 정의 아카이버에 root_dir 인수를 전달합니다. 이 경우 더 이상 압축을 수행하기 위해 프로세스의 현재 작업 디렉터리를 root_dir 로 일시적으로 변경하지 않습니다. (Serhiy Storchaka가 gh-74696 에서 기여함.)shutil.rmtree()가 이제 onerror 와 유사한 오류 처리기인 onexc 인수를 수락합니다. onexc 는 (typ, val, tb) 튜플 대신 예외 인스턴스를 기대합니다. onerror 는 사용 지원이 중단(deprecated)되었습니다. (Irit Katriel이 gh-102828 에서 기여함.)shutil.which()이 이제 Windows에서 주어진 cmd 에 디렉터리 구성 요소가 포함된 경우에도 PATH 내에서 일치하는 항목을 찾기 위해 PATHEXT 환경 변수를 참조합니다. (Charles Machalow가 gh-103179 에서 기여함.)shutil.which()이 Windows에서 실행 파일을 조회할 때 현재 작업 디렉터리를 검색 경로에 추가해야 하는지 결정하기 위해NeedCurrentDirectoryForExePathW를 호출합니다. (Charles Machalow가 gh-103179 에서 기여함.)shutil.which()이 Windows에서 검색 경로의 다른 곳에서 직접 일치하는 것을 찾기 전에PATHEXT의 구성 요소가 포함된 cmd 와 일치하는 경로를 반환합니다. (Charles Machalow가 gh-103179 에서 기여함.)
sqlite3¶
Add the
sqlite3.Connection.autocommitattribute tosqlite3.Connectionand the autocommit parameter tosqlite3.connect()to control PEP 249-compliant transaction handling. (Contributed by Erlend E. Aasland in gh-83638.)sqlite3.Connection.load_extension()에 SQLite 확장 엔트리 포인트를 재정의할 수 있는 entrypoint 키워드 전용 매개변수를 추가했습니다. (Erlend E. Aasland가 gh-103015 에서 기여함.)sqlite3.Connection에 데이터베이스 연결의 구성을 변경할 수 있는sqlite3.Connection.getconfig()및sqlite3.Connection.setconfig()를 추가했습니다. (Erlend E. Aasland가 gh-103489 에서 기여함.)
statistics¶
순위화된 데이터의 스피어먼 상관계수를 계산하기 위해 순위 기반의
ranked메서드를 포함하도록statistics.correlation()을 확장했습니다. (Raymond Hettinger가 gh-95861 에서 기여함.)
sys¶
PEP 669 모니터링 API를 노출하기 위해
sys.monitoring네임스페이스를 추가했습니다. (Mark Shannon이 gh-103082 에서 기여함.)스택 프로파일러 트램펄린을 활성화 및 비활성화하는
sys.activate_stack_trampoline()과sys.deactivate_stack_trampoline(), 그리고 스택 프로파일러 트램펄린이 활성화되어 있는지 확인하는sys.is_stack_trampoline_active()를 추가했습니다. (Pablo Galindo와 Christian Heimes가 Gregory P. Smith [Google] 및 Mark Shannon의 기여와 함께 gh-96123 에서 기여함.)마지막으로 발생한 처리되지 않은 예외를 보관하는
sys.last_exc를 추가했습니다(사후 디버깅 활용 사례). 기존 방식에서 동일한 정보를 제공하던 세 가지 필드인sys.last_type,sys.last_value,sys.last_traceback은 폐지되었습니다. (Irit Katriel이 gh-102778 에서 기여함.)sys._current_exceptions()은 이제(typ, exc, tb)튜플 대신 스레드 ID에서 예외 인스턴스로의 매핑을 반환합니다. (Irit Katriel이 gh-103176 에서 기여함.)sys.setrecursionlimit()및sys.getrecursionlimit(). 재귀 한계는 이제 파이썬 코드에만 적용됩니다. 내장 함수는 재귀 한계를 사용하지 않지만, 재귀로 인해 가상 머신이 충돌하는 것을 방지하는 별도의 메커니즘으로 보호됩니다.
tempfile¶
tempfile.NamedTemporaryFile함수에 새로운 선택적 매개변수 delete_on_close 가 추가되었습니다. (Evgeny Zorin이 gh-58451 에서 기여함.)tempfile.mkdtemp()은 이제 dir 매개변수로 제공된 인수가 상대 경로이더라도 항상 절대 경로를 반환합니다.
threading¶
Add
threading.settrace_all_threads()andthreading.setprofile_all_threads()that allow to set tracing and profiling functions in all running threads in addition to the calling one. (Contributed by Pablo Galindo in gh-93503.)
tkinter¶
tkinter.Canvas.coords()가 이제 인수를 평탄화(flatten)합니다. 이 함수는 개별 좌표(x1, y1, x2, y2, ...) 및 좌표 시퀀스([x1, y1, x2, y2, ...])뿐만 아니라create_*()메서드와 같이 쌍으로 묶인 좌표((x1, y1), (x2, y2), ...및[(x1, y1), (x2, y2), ...])도 수용합니다. (Serhiy Storchaka가 gh-94473 에서 기여함.)
토큰화(tokenize)¶
tokenize모듈에 PEP 701 에서 도입된 변경 사항이 포함되었습니다. (Marta Gómez Macías 및 Pablo Galindo가 gh-102856 에서 기여함.)tokenize모듈의 변경 사항에 대한 자세한 내용은 Python 3.12로 이식 를 참조하십시오.
types¶
서브클래스화될 때 사용자 정의 제네릭 형 를 더 자세히 조사할 수 있도록
types.get_original_bases()를 추가했습니다. (James Hilton-Balfe 및 Alex Waygood이 gh-101827 에서 기여함.)
typing¶
isinstance()를 사용하여runtime-checkable protocols를 검사할 때, 속성 존재 여부를 확인하기 위해 이제hasattr()대신inspect.getattr_static()을 사용합니다. 이는 runtime-checkable 프로토콜에 대한isinstance()검사 중에 디스크립터와__getattr__()메서드가 더 이상 예기치 않게 평가되지 않음을 의미합니다. 그러나 이로 인해 기존에 특정 runtime-checkable 프로토콜의 인스턴스로 간주되던 일부 객체가 Python 3.12+에서 해당 프로토콜의 인스턴스로 간주되지 않거나, 그 반대의 경우도 발생할 수 있습니다. 대부분의 사용자는 이 변화에 영향을 받지 않을 것입니다. (Alex Waygood이 gh-102433 에서 기여함.)runtime-checkable 프로토콜의 멤버는 이제 클래스가 생성되는 즉시 런타임에서 “얼어붙은(frozen)” 상태로 간주됩니다. runtime-checkable 프로토콜에 속성을 몽키 패치(Monkey-patching)하는 것은 여전히 작동하지만, 객체를 해당 프로토콜과 비교하는
isinstance()검사에는 영향을 주지 않습니다. 예를 들어:>>> from typing import Protocol, runtime_checkable >>> @runtime_checkable ... class HasX(Protocol): ... x = 1 ... >>> class Foo: ... ... >>> f = Foo() >>> isinstance(f, HasX) False >>> f.x = 1 >>> isinstance(f, HasX) True >>> HasX.y = 2 >>> isinstance(f, HasX) # HasX에 "y" 속성이 추가되었음에도 결과는 변하지 않음 True
이 변경 사항은 runtime-checkable 프로토콜에 대한
isinstance()검사 속도를 높이기 위해 이루어졌습니다.isinstance()를 사용하여runtime-checkable protocols를 검사할 때의 성능 프로파일이 크게 변했습니다. 멤버가 몇 개 없는 프로토콜에 대한 대부분의isinstance()검사는 3.11보다 최소 2배 이상 빨라졌으며, 일부는 20배 또는 그 이상 빠를 수 있습니다. 하지만 멤버가 많은 프로토콜에 대한isinstance()검사는 Python 3.11보다 느려질 수 있습니다. (Alex Waygood이 gh-74690 및 gh-103193 에서 기여함.)모든
typing.TypedDict및typing.NamedTuple클래스가 이제__orig_bases__속성을 가집니다. (Adrian Garcia Badaracco가 gh-103699 에서 기여함.)@typing.dataclass_transform에frozen_default매개 변수를 추가했습니다. (Erik De Bonte가 gh-99957 에서 기여함.)
unicodedata¶
유니코드 데이터베이스가 버전 15.0.0으로 업데이트되었습니다. (Benjamin Peterson이 gh-96734 에서 기여함.)
unittest¶
가장 느린 N개의 테스트 사례를 보여주는 --durations 명령행 옵션을 추가했습니다:
python3 -m unittest --durations=3 lib.tests.test_threading
.....
Slowest test durations
----------------------------------------------------------------------
1.210s test_timeout (Lib.test.test_threading.BarrierTests)
1.003s test_default_timeout (Lib.test.test_threading.BarrierTests)
0.518s test_timeout (Lib.test.test_threading.EventTests)
(0.000 durations hidden. Use -v to show these durations.)
----------------------------------------------------------------------
Ran 158 tests in 9.869s
OK (skipped=3)
(Giampaolo Rodola가 gh-48330 에서 기여함)
uuid¶
command-line interface 를 추가했습니다. (Adam Chhina가 gh-88597 에서 기여함.)
최적화¶
Unicode 객체에서
wstr및wstr_length멤버를 제거했습니다. 이로 인해 64비트 플랫폼에서 객체 크기가 8 또는 16바이트 감소합니다. (PEP 623) (Inada Naoki가 gh-92536 에서 기여함.)빌드 프로세스에서 성능을 1~5% 향상시키는 BOLT 바이너리 최적화 도구 사용에 대한 실험적 지원을 추가했습니다. (Kevin Modzelewski가 gh-90536 에서 기여하고 Donghee Na가 gh-101525 에서 조정함)
Speed up the regular expression substitution (functions
re.sub()andre.subn()and correspondingre.Patternmethods) for replacement strings containing group references by 2–3 times. (Contributed by Serhiy Storchaka in gh-91524.)비용이 많이 드는 문자열 포맷팅을 지연시켜
asyncio.Task생성 속도를 높였습니다. (Itamar Oren이 gh-103793 에서 기여함.)tokenize모듈에서 PEP 701 을 지원하기 위해 필요한 변경 사항의 부수적인 효과로tokenize.tokenize()및tokenize.generate_tokens()함수가 최대 64% 더 빨라졌습니다. (Marta Gómez Macías 및 Pablo Galindo가 gh-102856 에서 기여함.)새로운
LOAD_SUPER_ATTR명령어를 통해super()메서드 호출 및 속성 로드 속도를 높였습니다. (Carl Meyer 및 Vladimir Matveev가 gh-103497 에서 기여함.)
CPython 바이트코드 변경 사항¶
LOAD_METHOD명령어를 제거했습니다. 이 명령어는LOAD_ATTR에 병합되었습니다. 이제LOAD_ATTR은 oparg의 하위 비트가 설정된 경우 기존LOAD_METHOD와 동일하게 동작합니다. (Ken Jin이 gh-93429 에서 기여함.)JUMP_IF_FALSE_OR_POP및JUMP_IF_TRUE_OR_POP명령어를 제거했습니다. (Irit Katriel이 gh-102859 에서 기여함.)PRECALL명령어를 제거했습니다. (Mark Shannon이 gh-92925 에서 기여함.)BINARY_SLICE및STORE_SLICE명령어를 추가했습니다. (Mark Shannon이 gh-94163 에서 기여함.)CALL_INTRINSIC_1명령어를 추가했습니다. (Mark Shannon이 gh-99005 에서 기여함.)CALL_INTRINSIC_2명령어를 추가했습니다. (Irit Katriel이 gh-101799 에서 기여함.)CLEANUP_THROW명령어를 추가했습니다. (Brandt Bucher이 gh-90997 에서 기여함.)END_SEND명령어를 추가했습니다. (Mark Shannon이 gh-103082 에서 기여함.)PEP 709 구현의 일환으로
LOAD_FAST_AND_CLEAR명령어를 추가했습니다. (Carl Meyer가 gh-101441 에서 기여함.)LOAD_FAST_CHECK명령어를 추가했습니다. (Dennis Sweeney가 gh-93143 에서 기여함.)PEP 695 구현의 일환으로
LOAD_FROM_DICT_OR_DEREF,LOAD_FROM_DICT_OR_GLOBALS, 그리고LOAD_LOCALS를 추가했습니다. 또한,LOAD_LOCALS와LOAD_FROM_DICT_OR_DEREF로 대체 가능한LOAD_CLASSDEREF명령어를 제거했습니다. (Jelle Zijlstra가 gh-103764 에서 기여함.)LOAD_SUPER_ATTR명령어를 추가했습니다. (Carl Meyer 및 Vladimir Matveev가 gh-103497 에서 기여함.)RETURN_CONST명령어를 추가했습니다. (Wenyang Wang이 gh-101632 에서 기여함.)
데모 및 도구¶
오래된 데모 스크립트가 포함되어 있던
Tools/demo/디렉토리를 제거했습니다. 사본은 old-demos 프로젝트 에서 찾을 수 있습니다. (Victor Stinner가 gh-97681 에서 기여함.)Tools/scripts/디렉토리의 오래된 예제 스크립트를 제거했습니다. 사본은 old-demos 프로젝트 에서 찾을 수 있습니다. (Victor Stinner가 gh-97669 에서 기여함.)
폐지됨¶
argparse:argparse.BooleanOptionalAction의 type, choices, 그리고 metavar 매개변수가 폐지되었으며 3.14 버전에서 제거될 예정입니다. (Nikita Sobolev가 gh-92248 에서 기여함.)ast: 다음ast기능들은 파이썬 3.8부터 문서에서 폐지되었으며, 현재는 접근하거나 사용할 때 런타임에DeprecationWarning을 발생시키고 파이썬 3.14에서 제거될 예정입니다:ast.Numast.Strast.Bytesast.NameConstantast.Ellipsis
대신
ast.Constant를 사용하십시오. (Serhiy Storchaka가 gh-90953 에서 기여함.)-
자식 관찰자(child watcher) 클래스인
asyncio.MultiLoopChildWatcher,asyncio.FastChildWatcher,asyncio.AbstractChildWatcher, 그리고asyncio.SafeChildWatcher가 폐지되었으며 파이썬 3.14에서 제거될 예정입니다. (Kumar Aditya가 gh-94597 에서 기여함.)asyncio.set_child_watcher(),asyncio.get_child_watcher(),asyncio.AbstractEventLoopPolicy.set_child_watcher(), 그리고asyncio.AbstractEventLoopPolicy.get_child_watcher()가 폐지되었으며 파이썬 3.14에서 제거될 예정입니다. (Kumar Aditya가 gh-94597 에서 기여함.)기본 이벤트 루프 정책의
get_event_loop()메서드는 현재 설정된 이벤트 루프가 없는 상태에서 새로운 루프를 생성하기로 결정할 경우 이제DeprecationWarning을 발생시킵니다. (Serhiy Storchaka와 Guido van Rossum이 gh-100160 에서 제안함.)
calendar:calendar.January및calendar.February상수는 더 이상 사용되지 않으며(deprecated), 대신calendar.JANUARY및calendar.FEBRUARY로 대체됩니다. (Prince Roshan이 gh-103636 에서 제안함.)collections.abc:collections.abc.ByteString이(가) 더 이상 사용되지 않습니다(deprecated).런타임에
obj가 buffer protocol 을 구현하는지 확인하려면isinstance(obj, collections.abc.Buffer)를 사용하십시오. 타입 어노테이션에 사용할 때는Buffer를 사용하거나 코드에서 지원하는 유형을 명시적으로 지정하는 유니온(예:bytes | bytearray | memoryview)을 사용하십시오.ByteString은 원래bytes와bytearray모두의 상위 타입 역할을 하는 추상 클래스로 설계되었습니다. 하지만 이 ABC에 메서드가 전혀 없었기 때문에, 어떤 객체가ByteString의 인스턴스라는 사실이 객체에 대한 유용한 정보를 제공하지 못했습니다. 또한memoryview와 같은 다른 일반적인 버퍼 타입들도 런타임이나 정적 타입 검사에서ByteString의 하위 유형으로 인식되지 않았습니다.datetime:datetime.datetime의utcnow()및utcfromtimestamp()는 더 이상 사용되지 않으며(deprecated) 향후 버전에서 제거될 예정입니다. 대신 UTC 날짜를 나타낼 때는 시간대 정보가 포함된 객체를 사용하십시오. 즉, tz 매개변수를datetime.UTC로 설정하고now()및fromtimestamp()를 각각 호출하십시오. (Paul Gansle가 gh-103857 에서 제안함.)email:email.utils.localtime()의 isdst 매개 변수 사용을 중단합니다. (Alan Williams가 gh-72346 에서 제안함.)importlib.abc: 다음 클래스들의 사용을 중단하며, Python 3.14에서 제거될 예정입니다:importlib.abc.ResourceReaderimportlib.abc.Traversableimportlib.abc.TraversableResources
대신
importlib.resources.abc클래스들을 사용하십시오:(Jason R. Coombs와 Hugo van Kemenade가 gh-93963 에서 제안함.)
itertools: 문서화되지 않았고 비효율적이며 과거부터 버그가 많고 일관성이 없는 copy, deepcopy 및 pickle 연산 지원을 중단합니다. 이는 코드 분량과 유지 관리 부담을 크게 줄이기 위해 3.14에서 제거될 예정입니다. (Raymond Hettinger가 gh-101588 에서 제안함.)multiprocessing: In Python 3.14, the defaultmultiprocessingstart method will change to a safer one on Linux, BSDs, and other non-macOS POSIX platforms where'fork'is currently the default (gh-84559). Adding a runtime warning about this was deemed too disruptive as the majority of code is not expected to care. Use theget_context()orset_start_method()APIs to explicitly specify when your code requires'fork'. See contexts and start methods.pkgutil:pkgutil.find_loader()및pkgutil.get_loader()는 더 이상 사용되지 않으며(deprecated) Python 3.14에서 제거될 예정입니다. 대신importlib.util.find_spec()을 사용하십시오. (Nikita Sobolev가 gh-97850 에서 제안함.)pty: 이 모듈에는 문서화되지 않은master_open()및slave_open()함수가 두 개 있습니다. 이들은 Python 2부터 사용 중단되었으나 3.12에서야 정식으로DeprecationWarning을 발생시켰습니다. 3.14에서 해당 함수들을 제거합니다. (Soumendra Ganguly와 Gregory P. Smith가 gh-85984 에서 제안함.)os:Windows에서
os.stat()및os.lstat()이 반환하는st_ctime필드는 더 이상 사용되지 않습니다(deprecated). 향후 릴리스에서는 다른 플랫폼과 동일하게 마지막 메타데이터 변경 시간을 포함하게 됩니다. 현재는 여전히 생성 시간을 포함하며, 이는 새로운st_birthtime필드에서도 확인할 수 있습니다. (Steve Dower가 gh-99726 에서 제안함.)POSIX 플랫폼에서
os.fork()가 멀티스레드 프로세스에서 호출되는 것을 감지할 경우 이제DeprecationWarning을 발생시킬 수 있습니다. 이렇게 실행하는 것은 항상 POSIX 플랫폼과 근본적인 호환성 문제가 있었습니다. 비록 해당 코드가 겉보기에 작동하더라도 말입니다. 이러한 방식의 코드에서 발생하는 문제가 점점 더 빈번해짐에 따라 경고를 추가하여 인지도를 높이고자 합니다. 자세한 내용은os.fork()문서를 참조하고, 왜 이 오래된 플랫폼 호환성 문제를 개발자들에게 알리기로 했는지에 대한 이유는 이 스레드와 호환되지 않는 fork에 관한 논의 를 확인하십시오.
multiprocessing또는concurrent.futures를 사용하다가 이 경고가 발생하는 경우, 해결 방법은"spawn"또는"forkserver"와 같은 다른multiprocessing시작 메서드를 사용하는 것입니다.shutil:shutil.rmtree()의 onerror 인수가 더 이상 사용되지 않으므로(deprecated) 대신 onexc 를 사용하십시오. (Irit Katriel이 gh-102828 에서 제안함.)-
기본 어댑터 및 변환기 가 더 이상 사용되지 않습니다. 대신 어댑터 및 변환기 레시피 를 사용하고 필요에 맞게 조정하십시오. (Erlend E. Aasland가 gh-90016 에서 제안함.)
execute()에서 이름 있는 자리 표시자 를 사용할 때, 매개변수가dict가 아닌 sequence 로 제공되는 경우 이제DeprecationWarning을 발생시킵니다. Python 3.14부터는 이름 있는 자리 표시자를 사용하면서 매개변수를 시퀀스로 제공하면ProgrammingError를 발생시킵니다. (Erlend E. Aasland가 gh-101698 에서 제안함.)
sys:sys.last_type,sys.last_value, 그리고sys.last_traceback필드가 더 이상 사용되지 않습니다. 대신sys.last_exc를 사용하십시오. (Irit Katriel이 gh-102778 에서 제안함.)tarfile: filter 를 지정하지 않고 tar 아카이브를 추출하는 것은 더 이상 권장되지 않으며(deprecated), Python 3.14부터는'data'필터가 기본값이 됩니다. 자세한 내용은 추출 필터 를 참조하십시오.-
typing.Hashable및typing.Sized는 각각collections.abc.Hashable과collections.abc.Sized의 별칭이며, 더 이상 사용되지 않습니다(deprecated). (gh-94309.)typing.ByteString은(는) Python 3.9부터 사용 중단(deprecated)되었으며, 이제 사용할 때DeprecationWarning을 발생시킵니다. (Alex Waygood이 gh-91896 에서 제안함.)
xml.etree.ElementTree: 이제xml.etree.ElementTree.Element의 진리값(truth value)을 검사할 때DeprecationWarning을 발생시킵니다. 이전에는 Python 구현체에서FutureWarning이 발생했고, C 구현체에서는 아무것도 발생하지 않았습니다. (Jacob Walls가 gh-83122 에서 제안함.)coroutine throw(),generator throw(), 그리고async generator throw()의 3개 인자(type, value, traceback) 시그니처가 더 이상 사용되지 않으며(deprecated), 향후 Python 버전에서 제거될 수 있습니다. 대신 이 함수들의 단일 인자 버전을 사용하십시오. (Ofey Chan이 gh-89874 에서 제안함.)__package__가 모듈에서__spec__.parent와 다를 때 이제DeprecationWarning이 발생합니다(이전에는ImportWarning이었습니다). (Brett Cannon이 gh-65961 에서 제안함.)모듈에서
__package__또는__cached__를 설정하는 것은 더 이상 사용되지 않으며(deprecated), Python 3.14부터는 임포트 시스템에서 더 이상 설정되거나 고려되지 않습니다. (Brett Cannon이 gh-65961 에서 제안함.)bool에 대한 비트 반전 연산자(
~)가 더 이상 사용되지 않습니다. 이는 Python 3.16에서 오류를 발생시킵니다. 대신 bool의 논리적 부정을 위해not을 사용하십시오. 기초적인int값의 비트 반전이 실제로 필요한 드문 경우에에는 명시적으로 int로 변환하십시오:~int(x). (Tim Hoffmann가 gh-103487 에서 제안함.)코드 객체에서
codeobject.co_lnotab에 접근하는 기능은 Python 3.10에서 PEP 626 을 통해 사용 지원 중단(deprecated)되었으나, 3.12 버전에서야 정식으로DeprecationWarning이 발생하기 시작했습니다. 이 기능은 3.15에서 제거될 수 있습니다. (Nikita Sobolev가 gh-101866 을 통해 기능을 기여하였습니다.)
Python 3.13에서 제거 예정¶
모듈(siehe PEP 594):
aifcaudioopcgicgitbchunkcryptimghdrmailcapmsilibnisnntplibossaudiodevpipessndhdrspwdsunautelnetlibuuxdrlib
기타 모듈:
lib2to3, 그리고 2to3 프로그램 (gh-84540)
API:
configparser.LegacyInterpolation(gh-90765)locale.resetlocale()(gh-90817)turtle.RawTurtle.settiltangle()(gh-50096)unittest.findTestCases()(gh-50096)unittest.getTestCaseNames()(gh-50096)unittest.makeSuite()(gh-50096)unittest.TestProgram.usageExit()(gh-67048)webbrowser.MacOSX(gh-86421)classmethod설명자(descriptor) 체이닝 (gh-89519)
Python 3.14에서 삭제 예정¶
argparse:argparse.BooleanOptionalAction의 type, choices, 그리고 metavar 매개변수가 폐지되었으며 3.14 버전에서 제거될 예정입니다. (Nikita Sobolev가 gh-92248 에서 기여함.)ast: 다음 기능들은 파이썬 3.8부터 문서상에서 폐지되었으며, 현재는 접근하거나 사용할 때 런타임에DeprecationWarning을 발생시키고 파이썬 3.14에서 제거될 예정입니다.ast.Numast.Strast.Bytesast.NameConstantast.Ellipsis
대신
ast.Constant를 사용하십시오. (Serhiy Storchaka가 gh-90953 에서 기여함.)-
자식 관찰자(child watcher) 클래스인
asyncio.MultiLoopChildWatcher,asyncio.FastChildWatcher,asyncio.AbstractChildWatcher, 그리고asyncio.SafeChildWatcher가 폐지되었으며 파이썬 3.14에서 제거될 예정입니다. (Kumar Aditya가 gh-94597 에서 기여함.)asyncio.set_child_watcher(),asyncio.get_child_watcher(),asyncio.AbstractEventLoopPolicy.set_child_watcher(), 그리고asyncio.AbstractEventLoopPolicy.get_child_watcher()가 폐지되었으며 파이썬 3.14에서 제거될 예정입니다. (Kumar Aditya가 gh-94597 에서 기여함.)기본 이벤트 루프 정책의
get_event_loop()메서드는 현재 설정된 이벤트 루프가 없는 상태에서 새로운 루프를 생성하기로 결정할 경우 이제DeprecationWarning을 발생시킵니다. (Serhiy Storchaka와 Guido van Rossum이 gh-100160 에서 제안함.)
email:email.utils.localtime()의 isdst 매개변수를 폐지했습니다. (Alan Williams가 gh-72346 을 통해 기여함.)importlib.abc의 폐지된 클래스들:importlib.abc.ResourceReaderimportlib.abc.Traversableimportlib.abc.TraversableResources
대신
importlib.resources.abc클래스들을 사용하십시오:(Jason R. Coombs와 Hugo van Kemenade가 gh-93963 에서 제안함.)
itertools은 문서화되지 않았고 비효율적이며, 역사적으로 버그가 있고 일관성 없는 copy, deepcopy 및 pickle 작업 지원을 포함하고 있었습니다. 코드 양과 유지 관리 부담을 크게 줄이기 위해 이 기능들은 3.14에서 제거될 예정입니다. (Raymond Hettinger가 gh-101588 을 통해 기여함.)multiprocessing: 현재'fork'가 기본값인 Linux, BSD 및 기타 non-macOS POSIX 플랫폼에서 기본 시작 방법이 더 안전한 것으로 변경됩니다(gh-84559). 대부분의 코드가 영향을 받지 않을 것으로 예상되므로 이에 대한 런타임 경고를 추가하는 것은 너무 번거로운 것으로 판단되었습니다. 귀하의 코드가 명시적으로'fork'를 필요로 하는 경우get_context()또는set_start_method()API를 사용하여 지정하십시오. 자세한 내용은 컨텍스트 및 시작 방법 를 참조하십시오.pathlib:is_relative_to()및relative_to(): 추가 인자를 전달하는 것이 폐지되었습니다.pkgutil:pkgutil.find_loader()와pkgutil.get_loader()는 이제DeprecationWarning을 발생시킵니다; 대신importlib.util.find_spec()을 사용하십시오. (Nikita Sobolev가 gh-97850 을 통해 기여함.)pty:master_open()대신pty.openpty()를 사용하십시오.slave_open()대신pty.openpty()를 사용하십시오.
-
version및version_info.named placeholders 가 사용되고 parameters 가
dict대신 시퀀스인 경우의execute()및executemany().
urllib:urllib.parse.Quoter는 폐지되었습니다. 이는 공개 API로 설계되지 않았기 때문입니다. (Gregory P. Smith가 gh-88168 을 통해 기여함.)
Python 3.15에서 제거 예정¶
임포트 시스템:
__spec__.cached <importlib.machinery.ModuleSpec.cached>`를 설정하지 못하면서 모듈에 ``__cached__``를 설정하는 행위는 이제 폐지되었습니다. Python 3.15부터는 임포트 시스템이나 표준 라이브러리에서 ``__cached__``를 설정하거나 고려하지 않습니다. (:gh:`97879)
-
문서화되지 않은
ctypes.SetPointerType()함수는 Python 3.13부터 사용 지원 중단(deprecated)되었습니다.
-
더 이상 사용되지 않고 거의 쓰이지 않는
CGIHTTPRequestHandler는 Python 3.13부터 사용 지원 중단(deprecated)되었습니다. 직접적인 대체재는 없으나, 웹 서버와 요청 처리기를 연결할 때 CGI보다는 그 어떤 방식이라도 더 낫습니다.python -m http.server 명령 줄 인터페이스의
--cgi플래그는 Python 3.13부터 사용 지원 중단(deprecated)되었습니다.
-
load_module()메서드: 대신exec_module()을 사용하십시오.
-
.PurePath.is_reserved()는 Python 3.13부터 사용 지원 중단(deprecated)되었습니다. Windows에서 예약된 경로를 감지하려면os.path.isreserved()를 사용하십시오.
-
platform.java_ver()는 Python 3.13부터 사용 지원 중단(deprecated)되었습니다. 이 함수는 Jython 지원에만 유용하며, API가 혼란스럽고 대부분 테스트되지 않았습니다.
-
sysconfig.is_python_build()의 check_home 인자는 Python 3.12부터 사용 지원 중단(deprecated)되었습니다.
-
RLock()은 Python 3.15에서 인자를 받지 않습니다. Python 버전에서는 인자를 허용하지 않으나 C 버전에서는 모든 인자를 무시하며 임의의 개수의 위치 또는 키워드 인자를 허용하기 때문에, 인자를 전달하는 것은 Python 3.14부터 사용 지원 중단(deprecated)되었습니다.
-
types.CodeType:codeobject.co_lnotab에 접근하는 것은 PEP 626 을 통해 3.10부터 사용 지원 중단(deprecated)되었으며 3.12에서 제거될 예정이었으나, 3.12에서 비로소 적절한DeprecationWarning이 발생하게 되었습니다. 3.15에서 제거될 수 있습니다. (Nikita Sobolev가 gh-101866 을 통해 기여함.)
-
NamedTuple클래스를 생성할 때 사용하는 문서화되지 않은 키워드 인자 구문(예:Point = NamedTuple("Point", x=int, y=int))은 Python 3.13부터 사용 지원 중단(deprecated)되었습니다. 대신 클래스 기반 구문이나 기능적 구문을 사용하십시오.TypedDict의 기능적 구문을 사용할 때, fields 매개변수에 값을 전달하지 않거나(TD = TypedDict("TD"))None을 전달하는 것(TD = TypedDict("TD", None))은 Python 3.13부터 사용 지원 중단(deprecated)되었습니다. 필드가 없는 TypedDict를 생성하려면class TD(TypedDict): pass또는TD = TypedDict("TD", {})를 사용하십시오.@typing.no_type_check_decorator데코레이터 함수는 Python 3.13부터 사용 지원 중단(deprecated)되었습니다.typing모듈에 포함된 지 8년이 지났으나, 아직까지 어떤 주요 타입 검사기에서도 지원되지 않았습니다.
sre_compile,sre_constants, 그리고sre_parse모듈.wave:Wave_read및Wave_write클래스의getmark(),setmark(),getmarkers()메서드는 Python 3.13부터 사용 지원 중단(deprecated)되었습니다.
-
zipimport.zipimporter.load_module()은 Python 3.10부터 사용 지원 중단(deprecated)되었습니다. 대신exec_module()을 사용하십시오. (gh-125746.)
Python 3.16에서 제거 예정¶
임포트 시스템:
__spec__.loader를 설정하지 않으면서 모듈에__loader__를 설정하는 방식은 이제 폐지되었습니다. 파이썬 3.16부터는 임포트 시스템이나 표준 라이브러리에서__loader__를 설정하거나 고려하지 않습니다.__spec__.parent를 설정하지 않으면서 모듈에__package__를 설정하는 방식은 이제 폐지되었습니다. 파이썬 3.16부터는 임포트 시스템이나 표준 라이브러리에서__package__를 고려하지 않습니다. (gh-97879)
내장된
libmpdec복사본.-
'u'형식 코드(wchar_t)는 Python 3.3부터 문서에서, Python 3.13부터는 실행 시(runtime) 사용 중단되었습니다. 유니코드 문자의 경우 대신'w'형식 코드(Py_UCS4)를 사용하십시오.
-
asyncio.iscoroutinefunction()은 폐지되었으며 파이썬 3.16에서 제거될 예정입니다. 대신inspect.iscoroutinefunction()을 사용하십시오. (Jiahao Li와 Kumar Aditya가 gh-122875 를 통해 기능을 구현하였습니다.)asyncio정책 시스템은 폐지되었으며 파이썬 3.16에서 제거될 예정입니다. 특히 다음 클래스와 함수들이 폐지되었습니다:asyncio.AbstractEventLoopPolicyasyncio.DefaultEventLoopPolicyasyncio.WindowsSelectorEventLoopPolicyasyncio.WindowsProactorEventLoopPolicyasyncio.get_event_loop_policy()asyncio.set_event_loop_policy()
원하는 이벤트 루프 구현을 사용하려면 loop_factory 가 포함된
asyncio.run()또는asyncio.Runner를 사용해야 합니다.예를 들어, 윈도우에서
asyncio.SelectorEventLoop을 사용하려면:import asyncio async def main(): ... asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)
(Kumar Aditya가 gh-127949 를 통해 기능을 구현하였습니다.)
-
불리언 타입에 대한 비트 반전인
~True또는~False``는 결과가 직관적이지 않고 놀라운 값(-2`` 및-1)을 생성하므로 파이썬 3.12부터 폐지되었습니다. 불리언의 논리적 부정은 대신not x``를 사용하십시오. 기초 정수의 비트 반전이 필요한 드문 경우에는 명시적으로 `int`로 변환(``~int(x))하십시오.
-
파이썬 3.14부터
functools.reduce()의 파이썬 구현을 호출할 때 function 또는 sequence 를 키워드 인자로 사용하는 방식이 사용 지원 중단되었습니다.
-
strm 인자를 사용하는 커스텀 로깅 처리자에 대한 지원은 폐지되었으며 파이썬 3.16에서 제거될 예정입니다. 대신 stream 인자를 사용하여 처리기를 정의하십시오. (Mariusz Felisiak가 gh-115032 를 통해 기능을 구현하였습니다.)
-
mimetypes.MimeTypes.add_type()에서 유효한 확장자는 ‘.’로 시작하거나 비어 있어야 합니다. 점이 없는 확장자는 폐지되었으며 파이썬 3.16에서ValueError를 발생시킵니다. (Hugo van Kemenade가 gh-75223 를 통해 기능을 구현하였습니다.)
-
ExecError예외는 파이썬 3.14부터 폐지되었습니다. 이는 파이썬 3.4 이후shutil의 어떤 함수에서도 사용되지 않았으며, 현재RuntimeError의 별칭입니다.
-
symtable.Class.get_methods()메서드는 Python 3.14부터 폐지되었습니다.
sys:_enablelegacywindowsfsencoding()함수는 Python 3.13부터 폐지되었습니다. 대신PYTHONLEGACYWINDOWSFSENCODING환경 변수를 사용하십시오.
-
sysconfig.expand_makefile_vars()함수는 파이썬 3.14부터 폐지되었습니다. 대신sysconfig.get_paths`의 ``vars`()인수를 사용하십시오.
-
문서화되지 않았고 사용되지도 않는
TarInfo.tarfile어트리뷰트는 Python 3.13부터 폐지되었습니다.
파이썬 3.17에서 삭제 예정¶
-
연도 정보 없이
%e(월의 일수)를 포함하는 포맷 문자열을 사용하는strptime()호출이 파이썬 3.15부터 사용 중단되었습니다. (Stan Ulbrych가 gh-70647 에서 기여)
-
collections.abc.ByteString은 파이썬 3.17에서 제거될 예정입니다.런타임에
obj가 buffer protocol 을 구현하는지 확인하려면isinstance(obj, collections.abc.Buffer)를 사용하십시오. 타입 어노테이션에 사용할 때는Buffer를 사용하거나 코드에서 지원하는 유형을 명시적으로 지정하는 유니온(예:bytes | bytearray | memoryview)을 사용하십시오.ByteString은 원래bytes와bytearray모두의 상위 타입 역할을 하는 추상 클래스로 설계되었습니다. 하지만 이 ABC에 메서드가 전혀 없었기 때문에, 어떤 객체가ByteString의 인스턴스라는 사실이 객체에 대한 유용한 정보를 제공하지 못했습니다. 또한memoryview와 같은 다른 일반적인 버퍼 타입들도 런타임이나 정적 타입 검사에서ByteString의 하위 유형으로 인식되지 않았습니다.
-
encodings.normalize_encoding()에 ASCII가 아닌 인코딩 이름을 전달하는 것은 사용 중단되었으며 파이썬 3.17에서 제거될 예정입니다. (Stan Ulbrych가 gh-136702 에서 기여)
-
webbrowser.MacOSXOSAScript`은 :class:!webbrowser.MacOS`로 대체됨에 따라 사용 중단되었습니다. (gh-137586)
-
파이썬 3.14 이전에는 구식 유니온(union)이 비공개 클래스
typing._UnionGenericAlias를 사용하여 구현되었습니다. 이 클래스는 구현에 더 이상 필요하지 않지만, 하위 호환성을 위해 유지되고 있으며 파이썬 3.17에서 제거될 예정입니다. 사용자는 비공개 구현 세부 사항에 의존하는 대신typing.get_origin()및typing.get_args()와 같은 문서화된 인트로스펙션 도우미를 사용해야 합니다.typing.ByteString은 파이썬 3.9부터 사용 중단되었으며 파이썬 3.17에서 제거될 예정입니다.런타임에
obj가 buffer protocol 을 구현하는지 확인하려면isinstance(obj, collections.abc.Buffer)를 사용하십시오. 타입 어노테이션에 사용할 때는Buffer를 사용하거나 코드에서 지원하는 유형을 명시적으로 지정하는 유니온(예:bytes | bytearray | memoryview)을 사용하십시오.ByteString은 원래bytes와bytearray모두의 상위 타입 역할을 하는 추상 클래스로 설계되었습니다. 하지만 이 ABC에 메서드가 전혀 없었기 때문에, 어떤 객체가ByteString의 인스턴스라는 사실이 객체에 대한 유용한 정보를 제공하지 못했습니다. 또한memoryview와 같은 다른 일반적인 버퍼 타입들도 런타임이나 정적 타입 검사에서ByteString의 하위 유형으로 인식되지 않았습니다.
Python 3.19에서 삭제 예정¶
-
new()와 같은 해시 함수 생성자나md5(),sha256()과 같은 직접적인 해시 명칭을 가진 생성자에서, 선택적 초기 데이터 매개변수로 다양한hashlib구현체에 따라data=또는string=라는 이름의 키워드 인수를 전달할 수 있습니다.string키워드 인자 명칭에 대한 지원은 현재 사용 중단(deprecated)되었으며, Python 3.19에서 삭제될 예정입니다.Python 3.13 이전에는 해시 함수 백엔드 구현에 따라
string키워드 매개변수가 올바르게 지원되지 않았습니다. 최대한의 하위 호환성을 위해 초기 데이터를 위치 인자로 전달하는 것을 권장합니다.
-
http.cookies.Morsel.js_output()은(는) 폐지되었으며 Python 3.19에서 제거될 예정입니다.http.cookies.BaseCookie.js_output()은(는) 폐지되었으며 Python 3.19에서 제거될 예정입니다.
-
IMAP4.file를 변경하는 것은 이제 폐지되었으며 파이썬 3.19에서 제거될 예정입니다. 이 속성은 현재 사용되지 않으며 값을 변경해도 현재 파일이 자동으로 닫히지 않습니다.파이썬 3.14 이전에는 이 속성이
IMAP4`의 해당 ``read()`및readline()메서드를 구현하는 데 사용되었으나, 그 이후로는 더 이상 그렇지 않습니다.
Python 3.20에서 삭제 예정¶
format 인자 없이
struct.Struct`의 ``__new__()`메서드를 호출하는 것은 권장되지 않으며(deprecated), Python 3.20에서 삭제될 예정입니다. 초기화된Struct객체에 대해__init__()메서드를 호출하는 것도 권장되지 않으며, Python 3.20에서 삭제될 예정입니다.(Sergey B Kirpichev와 Serhiy Storchaka가 gh-143715 을 통해 기여하였습니다.)
이 표준 라이브러리 모듈에서
__version__,version및VERSION속성은 폐지되었으며 파이썬 3.20에서 제거될 예정입니다. 대신sys.version_info를 사용하십시오.ctypes.macholibdecimal(decimal.SPEC_VERSION대신 사용)logging(__date__도 폐지됨)xml.sax.expatreader
(Hugo van Kemenade와 Stan Ulbrych가 gh-76007 을 통해 기여하였습니다.)
PEP 829 에 의해 정의된 기능 중단 사항:
name.pth파일에서 발견된import라인에 대해 경고가 생성됩니다.name.pth파일은 더 이상 기본적으로 로케일 인코딩으로 디코딩되지 않습니다. 이 파일들은 반드시utf-8-sig로 인코딩되어야 합니다.
(Barry Warsaw가 gh-148641 을 통해 기여함.)
ast:추상적인 AST 노드(예를 들어
ast.AST또는ast.expr)의 인스턴스를 생성하는 것은 폐지되었으며 파이썬 3.20에서 오류를 발생시킵니다.
Python 3.21에서 삭제 예정¶
-
파이썬 3.3부터 소프트 폐지(soft-deprecated)된
abc.abstractclassmethod,abc.abstractstaticmethod, 및abc.abstractproperty가 이제DeprecationWarning을 발생시킵니다. 이 클래스들은 파이썬 3.21에서 제거될 예정이며, 대신 각각classmethod(),staticmethod(), 그리고property와 함께 사용되는abc.abstractmethod()를 사용하십시오.
ast:slice,Index,ExtSlice,Suite,Param,AugLoad및AugStore클래스는 Python 3.21에서 제거됩니다. 이 타입들은 파서에 의해 생성되지 않으며 코드 생성기에서도 수용되지 않습니다.ast.Tuple``의 ``dims속성은 Python 3.21에서 제거됩니다. 대신ast.Tuple.elts속성을 사용하십시오.
향후 버전에서 제거 예정¶
다음 API는 향후 제거될 예정이나, 현재로서는 구체적인 제거 날짜가 정해지지 않았습니다.
-
인수 그룹 중첩 및 상호 배타적인 그룹을 중첩하는 기능은 더 이상 권장되지 않습니다(deprecated).
add_argument_group()에 문서화되지 않은 키워드 인자 prefix_chars 를 전달하는 것은 이제 권장되지 않습니다.argparse.FileType유형 변환기가 더 이상 권장되지 않습니다.
-
제너레이터:
throw(type, exc, tb)및athrow(type, exc, tb)시그니처가 더 이상 권장되지 않습니다. 대신 단일 인자 시그니처인throw(exc)및athrow(exc)를 사용하십시오.현재 파이썬은 키워드가 바로 뒤따르는 숫자 리터럴을 허용합니다. 예를 들어
0in x,1or x,0if 1else 2등이 있습니다. 이는[0x1for x in y]([0x1 for x in y]또는[0x1f or x in y]로 해석될 수 있음)와 같이 혼란스럽고 모호한 표현을 허용합니다. 숫자 리터럴 바로 뒤에 키워드and,else,for,if,in,is및or중 하나가 오면 구문 경고가 발생합니다. 향후 릴리스에서는 이를 구문 오류로 변경할 예정입니다. (gh-87999)비정수형(non-int)을 반환하는
__index__()및__int__()메서드에 대한 지원이 중단됩니다. 이 메서드들은 이제 반드시int의 엄격한 하위 클래스 인스턴스를 반환해야 합니다.float`의 엄격한 하위 클래스를 반환하는 ``__float__()`메서드에 대한 지원이 중단됩니다. 이 메서드는 이제 반드시float인스턴스를 반환해야 합니다.complex`의 엄격한 하위 클래스를 반환하는 ``__complex__()`메서드에 대한 지원이 중단됩니다. 이 메서드는 이제 반드시complex인스턴스를 반환해야 합니다.complex()생성자에서 복소수를 real 또는 imag 인자로 전달하는 것은 이제 권장되지 않습니다. 복소수는 단일 위치 인자로만 전달해야 합니다. (Serhiy Storchaka가 gh-109218 을 통해 구현함.)
calendar:calendar.January및calendar.February상수는 더 이상 사용되지 않으며(deprecated), 대신calendar.JANUARY및calendar.FEBRUARY로 대체됩니다. (Prince Roshan이 gh-103636 에서 제안함.)codecs:codecs.open()대신open`을 사용하십시오. (:gh:`133038())codeobject.co_lnotab대신codeobject.co_lines()메서드를 사용하십시오.-
utcnow(): 대신datetime.datetime.now(tz=datetime.UTC)를 사용하십시오.utcfromtimestamp(): 대신datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)를 사용하십시오.
gettext: 복수형 값은 정수여야 합니다.-
cache_from_source()의 debug_override 매개 변수가 폐지되었습니다. 대신 optimization 매개 변수를 사용하십시오.
-
EntryPoints튜플 인터페이스.반환 값에 대한 묵시적
None.
logging:warn()메서드는 Python 3.3부터 폐지되었으며, 대신warning()을 사용하십시오.mailbox: StringIO 입력 및 텍스트 모드 사용이 폐지되었으며, 대신 BytesIO 및 바이너리 모드를 사용하십시오.os: 다중 스레드 프로세스에서 :func:`os.register_at_fork`를 호출하는 행위가 폐지되었습니다.os.path:os.path.commonprefix()는 폐지되었으며, 경로 접두사에는os.path.commonpath()를 사용하십시오.os.path.commonprefix()함수는 이름과 모듈이 오해의 소지가 있어 폐지됩니다. 이 함수는 경로 조작 관련 모듈에 포함되어 있음에도 불구하고 경로 접두사로 사용하는 것이 안전하지 않으며, 이 함수를 사용하면 파이썬 프로그램에 실수로 경로 탐색 취약점이 도입되기 쉽습니다.pydoc.ErrorDuringImport: exc_info 매개 변수에 대한 튜플 값 사용이 폐지되었으며, 예외 인스턴스를 사용하십시오.re: 정규 표현식에서 수치 그룹 참조 및 그룹 이름에 대해 더 엄격한 규칙이 적용됩니다. 이제 숫자 참조로는 ASCII 숫자의 시퀀스만 허용됩니다. 바이트 패턴 및 치환 문자열의 그룹 이름은 이제 ASCII 문자, 숫자, 밑줄(_)만 포함할 수 있습니다. (Serhriy Storchaka가 gh-91760 을 통해 구현함.)shutil:rmtree()의 onerror 매개 변수가 Python 3.12에서 폐지되었으며, 대신 onexc 매개 변수를 사용하십시오.ssl옵션 및 프로토콜:인자 없이 사용되는
ssl.SSLContext가 폐지되었습니다.ssl.SSLContext:set_npn_protocols()및selected_npn_protocol()이 폐지되었으며, 대신 ALPN을 사용하십시오.ssl.OP_NO_SSL*옵션ssl.OP_NO_TLS*옵션ssl.PROTOCOL_SSLv3ssl.PROTOCOL_TLSssl.PROTOCOL_TLSv1ssl.PROTOCOL_TLSv1_1ssl.PROTOCOL_TLSv1_2ssl.TLSVersion.SSLv3ssl.TLSVersion.TLSv1ssl.TLSVersion.TLSv1_1
threading메서드:threading.Condition.notifyAll(): 대신notify_all()을 사용하십시오.threading.Event.isSet()대신threading.Event.is_set()을 사용하십시오.threading.Thread.isDaemon()및threading.Thread.setDaemon()대신threading.Thread.daemon어트리뷰트를 사용하십시오.threading.Thread.getName()및threading.Thread.setName()대신threading.Thread.name어트리뷰트를 사용하십시오.threading.currentThread()대신threading.current_thread()를 사용하십시오.threading.activeCount()대신threading.active_count()를 사용하십시오.
내부 클래스
typing._UnionGenericAlias는 더 이상typing.Union을 구현하는 데 사용되지 않습니다. 이 비공개 클래스를 사용하는 사용자와의 호환성을 유지하기 위해 최소 Python 3.17까지 호환성 쉼(shim)이 제공됩니다. (Jelle Zijlstra가 gh-105499 에서 기여함.)unittest.IsolatedAsyncioTestCase: 테스트 케이스에서None이 아닌 값을 반환하는 기능은 이제 폐지되었습니다.urllib.parse폐지된 함수: 대신urlparse()사용splitattr()splithost()splitnport()splitpasswd()splitport()splitquery()splittag()splittype()splituser()splitvalue()to_bytes()
wsgiref:SimpleHandler.stdout.write()는 부분적인 쓰기(partial write)를 수행해서는 안 됩니다.xml.etree.ElementTree:대신 명시적인 ``len(elem)`또는elem is not None테스트를 사용하는 것을 권장합니다.sys._clear_type_cache()는 폐지되었으므로 대신sys._clear_internal_caches()를 사용하십시오.
제거됨¶
asynchat 및 asyncore¶
configparser¶
configparser에서 오래전(3.2 버전)에 사용 중단되었던 여러 이름이 gh-89336 에 따라 제거되었습니다:configparser.ParsingError`은(는) 더 이상 ``filename`속성이나 인수를 가지지 않습니다. 대신source속성과 인수를 사용하십시오.configparser는 더 이상SafeConfigParser클래스를 포함하지 않습니다. 대신 짧은 명칭인ConfigParser를 사용하십시오.configparser.ConfigParser는 더 이상readfp메서드를 제공하지 않습니다. 대신read_file()을 사용하십시오.
distutils¶
ensurepip¶
ensurepip에서 번들로 제공되는 setuptools 휠을 제거하고,venv에 의해 생성된 환경에서 setuptools를 설치하는 것을 중단합니다.pip (>= 22.1)는 환경에setuptools가 설치되어 있지 않아도 작동합니다. 파이썬 패키지를 빌드할 때 사용하는 빌드 환경에서 pip가 직접setuptools를 제공하기 때문에,setuptools기반(및distutils기반) 패키지도 여전히pip install을 통해 사용할 수 있습니다.easy_install,pkg_resources,setuptools및distutils는setuptools패키지의 일부이므로,venv로 생성하거나ensurepip로 부트스트랩한 환경에서 더 이상 기본으로 제공되지 않습니다. 실행 시(runtime) 이러한 도구에 의존하는 프로젝트의 경우,setuptools를 의존성으로 선언하고 별도로 설치해야 합니다(일반적으로 pip 사용).(Pradyun Gedam가 gh-95299 를 통해 기능을 기여하였습니다.)
enum¶
ftplib¶
gzip¶
Python 2.6부터 사용 지원이 중단된
gzip의gzip.GzipFile내filename어트리뷰트를 제거했습니다. 대신name어트리뷰트를 사용하십시오. 쓰기 모드에서filename어트리뷰트는 확장자가 없는 경우'.gz'파일 확장자를 추가하는 기능을 수행했습니다. (Victor Stinner가 gh-94196 을 통해 기능을 기여하였습니다.)
hashlib¶
Python 3.10에서 사용 지원이 중단된
hashlib의hashlib.pbkdf2_hmac()순수 파이썬 구현을 제거했습니다. Python 3.10 이상은 OpenSSL 1.1.1(PEP 644)을 요구하며, 이 버전의 OpenSSL은 더 빠른 C 구현의pbkdf2_hmac()를 제공합니다. (Victor Stinner가 gh-94199 를 통해 기능을 기여하였습니다.)
importlib¶
importlib에서 이전에 사용 지원이 중단되었던 여러 정리 작업들이 완료되었습니다:module_repr()에 대한 참조 및 지원이 제거되었습니다. (Barry Warsaw가 gh-97850 을 통해 기능을 기여하였습니다.)importlib.util.set_package,importlib.util.set_loader및importlib.util.module_for_loader가 모두 제거되었습니다. (Brett Cannon와 Nikita Sobolev가 각각 gh-65961 및 gh-97850 를 통해 기능을 기여하였습니다.)find_loader()및find_module()API 지원이 제거되었습니다. (Barry Warsaw가 gh-98040 을 통해 기능을 기여하였습니다.)importlib.abc.Finder,pkgutil.ImpImporter및pkgutil.ImpLoader가 제거되었습니다. (Barry Warsaw가 gh-98040 를 통해 기능을 기여하였습니다.)
imp¶
imp모듈이 제거되었습니다. (Barry Warsaw가 gh-98040 를 통해 기능을 기여하였습니다.)마이그레이션하려면 다음 대응표를 참조하십시오.
imp
importlib
imp.NullImportersys.path_importer_cache에None을 삽입합니다.imp.cache_from_source()imp.find_module()imp.get_magic()imp.get_suffixes()importlib.machinery.SOURCE_SUFFIXES,importlib.machinery.EXTENSION_SUFFIXES, 및importlib.machinery.BYTECODE_SUFFIXESimp.get_tag()imp.load_module()imp.new_module(name)types.ModuleType(name)imp.reload()imp.source_from_cache()imp.load_source()아래를 참조하십시오
imp.load_source()를 다음으로 대체합니다:import importlib.util import importlib.machinery def load_source(modname, filename): loader = importlib.machinery.SourceFileLoader(modname, filename) spec = importlib.util.spec_from_file_location(modname, filename, loader=loader) module = importlib.util.module_from_spec(spec) # 모듈은 항상 실행되며 sys.modules에 캐시되지 않습니다. # 모듈을 캐싱하려면 다음 줄의 주석을 해제하십시오. # sys.modules[module.__name__] = module loader.exec_module(module) return module
대체 기능이 없는
imp함수 및 어트리뷰트를 제거했습니다.문서화되지 않은 함수:
imp.init_builtin()imp.load_compiled()imp.load_dynamic()imp.load_package()
imp.lock_held(),imp.acquire_lock(),imp.release_lock(): 파이썬 3.3에서 잠금 방식이 모듈 단위 잠금으로 변경되었습니다.imp.find_module()상수:SEARCH_ERROR,PY_SOURCE,PY_COMPILED,C_EXTENSION,PY_RESOURCE,PKG_DIRECTORY,C_BUILTIN,PY_FROZEN,PY_CODERESOURCE,IMP_HOOK.
io¶
locale¶
Python 3.7에서 사용 지원이 중단된
locale의locale.format()함수를 제거했습니다. 대신locale.format_string()을 사용하십시오. (Victor Stinner가 gh-94226 를 통해 기능을 기여하였습니다.)
smtpd¶
sqlite3¶
파이썬 3.10에서 사용 지원이 중단된 다음의 문서화되지 않은
sqlite3기능들이 제거되었습니다:sqlite3.enable_shared_cache()sqlite3.OptimizedUnicode
공유 캐시를 사용해야 하는 경우,
cache=shared쿼리 파라미터를 사용하여 URI 모드로 데이터베이스를 여십시오.The
sqlite3.OptimizedUnicodetext factory has been an alias forstrsince Python 3.3. Code that previously set the text factory toOptimizedUnicodecan either usestrexplicitly, or rely on the default value which is alsostr.(Erlend E. Aasland가 gh-92548 을 통해 기능을 기여하였습니다.)
ssl¶
Python 3.6에서 사용 지원이 중단된
ssl의ssl.RAND_pseudo_bytes()함수를 제거했습니다. 대신os.urandom()또는ssl.RAND_bytes()를 사용하십시오. (Victor Stinner가 gh-94199 를 통해 기능을 기여하였습니다.)ssl.match_hostname()함수를 제거했습니다. 이 함수는 파이썬 3.7에서 사용 지원이 중단되었습니다. 파이썬 3.7부터 OpenSSL이 호스트 이름 매칭을 수행하므로, 파이썬은 더 이상ssl.match_hostname()함수를 사용하지 않습니다. (Victor Stinner가 gh-94199 를 통해 기능을 기여하였습니다.)파이썬 3.7에서 사용 지원이 중단된
ssl.wrap_socket()함수를 제거했습니다. 대신ssl.SSLContext객체를 생성하고 해당 객체의ssl.SSLContext.wrap_socket메서드를 호출하십시오. 여전히ssl.wrap_socket()을 사용하는 모든 패키지는 손상되었으며 보안에 취약합니다. 이 함수는 SNI TLS 확장을 전송하지도, 서버 호스트 이름을 검증하지도 않습니다. 해당 코드는 CWE 295 (부적절한 인증서 검증)에 해당할 수 있습니다. (Victor Stinner가 gh-94199 를 통해 기능을 기여하였습니다.)
unittest¶
오랫동안 사용이 중단된 여러
unittest기능들을 제거했습니다.TestCase메서드별칭 다수:폐지된 에일리어스
메서드 이름
사용 지원 중단 버전
failUnless3.1
failIf3.1
failUnlessEqual3.1
failIfEqual3.1
failUnlessAlmostEqual3.1
failIfAlmostEqual3.1
failUnlessRaises3.1
assert_3.2
assertEquals3.2
assertNotEquals3.2
assertAlmostEquals3.2
assertNotAlmostEquals3.2
assertRegexpMatches3.2
assertRaisesRegexp3.2
assertNotRegexpMatches3.5
https://github.com/isidentical/teyit을 사용하여 단위 테스트를 자동으로 최신화할 수 있습니다.
문서화되지 않았고 손상된
TestCase메서드assertDictContainsSubset(파이썬 3.2에서 사용 지원 중단).문서화되지 않은
TestLoader.loadTestsFromModule파라미터 use_load_tests (파이썬 3.5부터 사용 지원 중단 및 무시됨).TextTestResult클래스의 별칭인_TextTestResult(파이썬 3.2에서 사용 지원 중단).
(Serhiy Storchaka가 gh-89325 를 통해 기능을 기여하였습니다.)
webbrowser¶
webbrowser`에서 더 이상 사용되지 않는 브라우저 지원을 제거했습니다. 제거된 브라우저는 Grail, Mosaic, Netscape, Galeon, Skipstone, Iceape, Firebird, 그리고 Firefox 35 이하 버전입니다 (:gh:`102871).
xml.etree.ElementTree¶
파이썬 3.10에서 사용 지원이 중단된 순수 파이썬 구현의
ElementTree.Element.copy()메서드를 제거했습니다. 대신copy.copy()함수를 사용하십시오.xml.etree.ElementTree의 C 구현체에는copy()메서드가 없으며, 오직__copy__()메서드만 존재합니다. (Victor Stinner가 gh-94383 을 통해 기능을 기여하였습니다.)
zipimport¶
기타¶
Remove the
suspiciousrule from the documentationMakefileandDoc/tools/rstlint.py, both in favor of sphinx-lint. (Contributed by Julien Palard in gh-98179.)파이썬 3.6부터 사용 지원이 중단된
ftplib,imaplib,poplib,smtplib모듈의 keyfile 및 certfile 파라미터와http.client모듈의 key_file, cert_file 및 check_hostname 파라미터를 제거했습니다. 대신 context 파라미터(imaplib에서는 ssl_context)를 사용하십시오. (Victor Stinner가 gh-94172 를 통해 기능을 기여하였습니다.)여러 표준 라이브러리 모듈 및 테스트에서
Jython호환성 꼼수를 제거했습니다. (Nikita Sobolev가 gh-99482 를 통해 기능을 기여하였습니다.)ctypes모듈에서_use_broken_old_ctypes_structure_semantics_플래그를 제거했습니다. (Nikita Sobolev가 gh-99285 를 통해 기능을 기여하였습니다.)
Python 3.12로 이식¶
이 섹션은 이전에 설명된 변경 사항과 코드를 수정해야 할 수도 있는 기타 버그 수정을 나열합니다.
파이썬 API 변경 사항¶
정규 표현식에서 숫자 그룹 참조 및 그룹 이름에 대해 더 엄격한 규칙이 적용됩니다. 이제 숫자 참조로는 ASCII 숫자의 시퀀스만 허용됩니다. 바이트 패턴과 치환 문자열 내의 그룹 이름은 ASCII 영문자, 숫자, 밑줄(_)만 포함할 수 있습니다. (Serhiy Storchaka가 gh-91760 을 통해 기능을 기여하였습니다.)
Python 3.10부터 폐지된
randrange()기능을 제거했습니다. 이전에는randrange(10.0)이randrange(10)으로 손실 없이 변환되었으나, 이제는TypeError를 발생시킵니다. 또한randrange(10.5)나randrange('10')와 같은 비정수 값에 대해 발생하는 예외가ValueError에서TypeError로 변경되었습니다. 이는randrange(1e25)가randrange(10**25)보다 더 큰 범위에서 조용히 선택되는 버그를 방지합니다. (원래 Serhiy Storchaka의 제안으로 gh-86388 에 의해 구현되었습니다.)argparse.ArgumentParser가 파일을 읽어 인자를 처리할 때(예:fromfile_prefix_chars옵션)의 인코딩 및 오류 처리 방식을 기본 텍스트 인코딩(예:locale.getpreferredencoding(False))에서 filesystem encoding and error handler 로 변경했습니다. Windows에서는 인자 파일이 ANSI Codepage 대신 UTF-8로 인코딩되어야 합니다.Python 3.4.7 및 3.5.4에서 폐지된
asyncore기반의smtpd모듈을 제거했습니다. 권장되는 대체재는asyncio기반의 aiosmtpd PyPI 모듈입니다.shlex.split(): s 인자에None을 전달할 경우 이제sys.stdin을 읽는 대신 예외를 발생시킵니다. 이 기능은 Python 3.9에서 폐지되었습니다. (Victor Stinner가 gh-94352 를 통해 구현했습니다.)os모듈은 더 이상bytearray및memoryview와 같은 bytes-like 경로를 허용하지 않습니다. 바이트 문자열의 경우 정확히bytes타입만 허용됩니다. (Victor Stinner가 gh-98393 을 통해 구현했습니다.)syslog.openlog()및syslog.closelog()은 이제 서브 인터프리터(subinterpreter)에서 사용 시 실패합니다.syslog.syslog()는 서브 인터프리터에서도 여전히 사용할 수 있지만, 오직 메인 인터프리터에서syslog.openlog()가 이미 호출된 경우에만 가능합니다. 이러한 새로운 제한 사항은 메인 인터프리터에는 적용되지 않으므로 매우 적은 수의 사용자에게만 영향을 미칩니다. 이 변경 사항은 인터프리터 격리에 도움이 됩니다. 또한,syslog는 프로세스 전역 리소스를 래핑하는 것이므로 메인 인터프리터에서 관리하는 것이 가장 좋습니다. (Donghee Na가 gh-99127 을 통해 구현했습니다.)@~functools.cached_property의 문서화되지 않은 잠금(locking) 동작을 제거했습니다. 이 기능은 클래스의 모든 인스턴스에 걸쳐 잠금을 수행하여 높은 잠금 경합을 유발했기 때문입니다. 이는 이제 두 스레드가 경쟁할 경우 단일 인스턴스에 대해 캐시된 속성 getter 함수가 여러 번 실행될 수 있음을 의미합니다. 대부분의 단순한 캐시된 속성(예를 들어, 멱등성을 가지며 인스턴스의 다른 속성을 기반으로 값을 계산하는 경우)은 문제가 없습니다. 동기화가 필요한 경우, 캐시된 속성 getter 함수 내부 또는 멀티스레드 접근 지점 주위에 잠금을 구현하십시오.sys._current_exceptions()은 이제(typ, exc, tb)튜플 대신 스레드 ID에서 예외 인스턴스로의 매핑을 반환합니다. (Irit Katriel이 gh-103176 에서 기여함.)tarfile또는shutil.unpack_archive()를 사용하여 tar 파일을 추출할 때, 예상치 못한 동작이나 위험한 기능을 제한하기 위해 filter 인수를 전달하십시오. 자세한 내용은 추출 필터 를 참조하십시오.PEP 701 에서 도입된 변경 사항으로 인해
tokenize.tokenize()및tokenize.generate_tokens()함수의 출력이 변경되었습니다. 이는 f-문자열에 대해 더 이상STRING토큰이 생성되지 않고, 대신 PEP 701 에서 설명하는 토큰들이 생성됨을 의미합니다. 표현 성분의 토큰화에 적절한 토큰과 더불어, f-문자열의 “문자열” 부분에 대해서는 이제FSTRING_START,FSTRING_MIDDLE및FSTRING_END가 발송됩니다. 예를 들어, f-문자열f"start {1+1} end"에 대해 이전 버전의 토크나이저는 다음을 출력했습니다:1,0-1,18: STRING 'f"start {1+1} end"'
반면 새 버전은 다음을 출력합니다:
1,0-1,2: FSTRING_START 'f"' 1,2-1,8: FSTRING_MIDDLE 'start ' 1,8-1,9: OP '{' 1,9-1,10: NUMBER '1' 1,10-1,11: OP '+' 1,11-1,12: NUMBER '1' 1,12-1,13: OP '}' 1,13-1,17: FSTRING_MIDDLE ' end' 1,17-1,18: FSTRING_END '"'
또한, PEP 701 지원을 위해 필요한 변경 사항으로 인해 몇 가지 사소한 동작 변화가 있을 수 있습니다. 이러한 변경 사항 중 일부는 다음과 같습니다.
!와 같은 일부 잘못된 파이썬 문자를 토큰화할 때 생성되는 토큰의type속성이ERRORTOKEN에서OP로 변경되었습니다.불완전한 단일 행 문자열도 이제 불완전한 다중 행 문자열과 마찬가지로
tokenize.TokenError를 발생시킵니다.일부 불완전하거나 유효하지 않은 파이썬 코드를 토큰화할 때, 이제 임의의
ERRORTOKEN을 반환하는 대신tokenize.TokenError를 발생시킵니다.동일한 파일에서 들여쓰기를 할 때 탭과 공백을 혼용하는 것은 더 이상 지원되지 않으며
TabError를 발생시킵니다.
threading모듈은 이제_thread모듈에_is_main_interpreter속성이 있기를 기대합니다. 이는 인자가 없는 함수로, 현재 인터프리터가 메인 인터프리터이면True를 반환합니다.커스텀
_thread모듈을 제공하는 모든 라이브러리나 애플리케이션은_is_main_interpreter()를 제공해야 합니다. (자세한 내용은 gh-112826 을 참조하십시오.)
빌드 변경 사항¶
파이썬은 더 이상 공유 C 확장 모듈을 빌드하는 데
setup.py를 사용하지 않습니다. 헤더 및 라이브러리와 같은 빌드 매개변수는configure스크립트에서 감지됩니다. 확장 모듈은Makefile에 의해 빌드됩니다. 대부분의 확장 모듈은pkg-config를 사용하며, 실패할 경우 수동 탐색으로 전환합니다. (Christian Heimes가 gh-93939 을 통해 구현했습니다.)파이썬을 빌드할 때 이제
va_start(args, format)과 같이 두 개의 매개변수를 가진va_start()가 필요합니다.va_start()는 더 이상 단일 매개변수와 함께 호출되지 않습니다. (Kumar Aditya가 gh-93207 을 통해 구현했습니다.)Clang 컴파일러가 플래그를 수용하는 경우, CPython은 이제 기본 링크 시간 최적화 정책으로 ThinLTO 옵션을 사용합니다. (Donghee Na가 gh-89536 을 통해 구현했습니다.)
Add
COMPILEALL_OPTSvariable inMakefileto overridecompilealloptions (default:-j0) inmake install. Also merged the 3compileallcommands into a single command to build .pyc files for all optimization levels (0, 1, 2) at once. (Contributed by Victor Stinner in gh-99289.)64비트 LoongArch를 위한 플랫폼 트리플렛을 추가합니다:
loongarch64-linux-gnusf
loongarch64-linux-gnuf32
loongarch64-linux-gnu
(Zhang Na가 gh-90656 을 통해 구현했습니다.)
PYTHON_FOR_REGEN은 이제 파이썬 3.10 이상 버전을 요구합니다.configure를 다시 생성하려면 Autoconf 2.71 및 aclocal 1.16.4가 필요합니다. (Christian Heimes가 gh-89886 을 통해 구현했습니다.)python.org의 Windows 빌드 및 macOS 설치 프로그램은 이제 OpenSSL 3.0을 사용합니다.
C API 변경 사항¶
새로운 기능¶
PEP 697: 디버거 및 JIT 컴파일러와 같은 저수준 도구를 위한 Unstable C API tier <unstable-c-api>`를 도입했습니다. 이 API는 CPython의 마이너 릴리스마다 폐지 경고 없이 변경될 수 있습니다. 해당 내용은 이름에 ``PyUnstable_` 접두사로 표시됩니다.
코드 객체 생성자:
PyUnstable_Code_New()(PyCode_New에서 이름 변경)PyUnstable_Code_NewWithPosOnlyArgs()(PyCode_NewWithPosOnlyArgs에서 이름 변경)
코드 객체를 위한 추가 저장 공간(PEP 523):
PyUnstable_Eval_RequestCodeExtraIndex()(_PyEval_RequestCodeExtraIndex에서 이름 변경)PyUnstable_Code_GetExtra()(_PyCode_GetExtra에서 이름 변경)PyUnstable_Code_SetExtra()(_PyCode_SetExtra에서 이름 변경)
해당 API가 변경될 때까지 기존 이름은 계속 사용할 수 있습니다.
(Petr Viktorin이 gh-101101 을 통해 구현했습니다.)
PEP 697: 인스턴스 메모리 레이아웃이 불투명한(opaque) 형을 확장하기 위한 API를 추가했습니다:
PyType_Spec.basicsize는 기본 클래스의 크기를 상속하거나 확장하는 것을 지정하기 위해 0 또는 음수일 수 있습니다.서브클래스 특정 인스턴스 데이터에 접근할 수 있도록
PyObject_GetTypeData()및PyType_GetTypeDataSize()가 추가되었습니다.PyType_Type을 포함한 특정 가변 크기 형을 안전하게 확장할 수 있도록Py_TPFLAGS_ITEMS_AT_END및PyObject_GetItemData()가 추가되었습니다.서브클래스 특정 구조체(struct)를 기준으로
members를 정의할 수 있도록Py_RELATIVE_OFFSET이 추가되었습니다.
(Petr Viktorin이 gh-103509 를 통해 구현했습니다.)
기존
PyType_FromModuleAndSpec()을 추가적인 메타클래스 인자를 사용하여 일반화한 새로운 limited C API 함수인PyType_FromMetaclass()를 추가했습니다. (Wenzel Jakob가 gh-93012 를 통해 구현했습니다.)vectorcall 프로토콜 을 사용하여 호출할 수 있는 객체를 생성하는 API가 Limited API 에 추가되었습니다:
The
Py_TPFLAGS_HAVE_VECTORCALLflag is now removed from a class when the class’s__call__()method is reassigned. This makes vectorcall safe to use with mutable types (i.e. heap types without the immutable flag,Py_TPFLAGS_IMMUTABLETYPE). Mutable types that do not overridetp_callnow inherit thePy_TPFLAGS_HAVE_VECTORCALLflag. (Contributed by Petr Viktorin in gh-93274.)Py_TPFLAGS_MANAGED_DICT및Py_TPFLAGS_MANAGED_WEAKREF플래그가 추가되었습니다. 이를 통해 확장 클래스에서 적은 관리 작업으로도 객체__dict__와 weakref를 지원할 수 있으며, 메모리 사용량이 줄고 접근 속도가 빨라집니다.vectorcall 프로토콜 을 사용하여 호출을 수행하는 API가 Limited API 에 추가되었습니다:
이는 벡터 호출 프로토콜의 수신 및 송신 끝단이 이제 Limited API 에서 모두 사용할 수 있음을 의미합니다. (Wenzel Jakob가 gh-98586 에서 기여했습니다.)
호출 중인 스레드 외에도 실행 중인 모든 스레드에 트레이싱 및 프로파일링 함수를 설정할 수 있는 두 개의 새로운 공개 함수,
PyEval_SetProfileAllThreads()와PyEval_SetTraceAllThreads()를 추가했습니다. (Pablo Galindo가 gh-93503 을 통해 구현했습니다.)주어진
PyFunctionObject의 vectorcall 필드를 설정하는 새로운 함수PyFunction_SetVectorcall()을 C API에 추가했습니다. (Andrew Frost가 gh-92257 을 통해 구현했습니다.)C API에서 이제
PyDict_AddWatcher(),PyDict_Watch()및 관련 API를 통해 딕셔너리가 수정될 때마다 호출되는 콜백을 등록할 수 있습니다. 이는 최적화된 인터프리터, JIT 컴파일러 또는 디버거에서 사용하기 위한 것입니다. (Carl Meyer가 gh-91052 를 통해 구현했습니다.)타입의 변경 사항에 대한 알림을 받기 위해 콜백을 등록하는
PyType_AddWatcher()및PyType_Watch()API를 추가했습니다. (Carl Meyer가 gh-91051 을 통해 구현했습니다.)코드 객체의 생성 및 파괴 시 알림을 받기 위한 콜백을 등록하는
PyCode_AddWatcher()및PyCode_ClearWatcher()API를 추가했습니다. (Itamar Oren이 gh-91054 에서 기여했습니다.)프레임 변수를 이름으로 가져오는
PyFrame_GetVar()및PyFrame_GetVarString()함수를 추가했습니다. (Victor Stinner가 gh-91248 에서 기여했습니다.)현재 예외를 저장하고 복원하기 위한
PyErr_GetRaisedException()및PyErr_SetRaisedException()을 추가했습니다. 이 함수들은 이제 폐지된PyErr_Fetch()및PyErr_Restore()의 세 가지 인자 대신 단일 예외 객체를 반환하고 수용합니다. 이는 오류가 발생할 가능성이 적고 약간 더 효율적입니다. (Mark Shannon이 gh-101578 에서 기여했습니다.)이제 폐지된 레거시 API인
_PyErr_ChainExceptions를 대체하기 위해 예외 인스턴스를 인수로 받는_PyErr_ChainExceptions1을 추가했습니다. (Mark Shannon이 gh-101578 에서 기여했습니다.)예외 생성자에 전달된
args를 가져오고 수정하기 위한 편의 함수인PyException_GetArgs()및PyException_SetArgs()를 추가했습니다. (Mark Shannon이 gh-101578 에서 기여했습니다.)레거시 API인
PyErr_Display()를 대신하여 예시 인스턴스를 받는PyErr_DisplayException()을 추가했습니다. (Irit Katriel이 gh-102755 에서 기여했습니다.)
PEP 683: 객체가 참조 횟수를 무시할 수 있게 하는 Immortal Objects 를 도입하고 이와 관련된 C-API 변경 사항을 적용했습니다:
_Py_IMMORTAL_REFCNT: 객체를 정의하는 참조 횟수불멸(immortal)로 정의함.
_Py_IsImmortal: 객체가 불멸 참조 횟수를 가졌는지 확인합니다.PyObject_HEAD_INIT: 이제 이 매크로는 참조 횟수를 다음으로 초기화합니다.Py_BUILD_CORE와 함께 사용될 때_Py_IMMORTAL_REFCNT로 초기화합니다.
SSTATE_INTERNED_IMMORTAL: 인턴된 유니코드 객체에 대한 식별자불멸인 경우입니다.
SSTATE_INTERNED_IMMORTAL_STATIC: 인턴된 유니코드에 대한 식별자불임(immortal)이면서 정적인 객체입니다.
sys.getunicodeinternedsize: 이 함수는 인턴된 유니코드의 총 개수를 반환합니다.인턴된 객체들의 총 개수입니다. 이는 이제
refleak.py가 참조 횟수와 할당된 블록을 정확하게 추적하는 데 필요합니다.
(Eddie Elizondo가 gh-84436 에서 기여했습니다.)
PEP 684: 독자적인 GIL을 가진 서브 인터프리터를 생성하는 데 사용될 수 있는 새로운
Py_NewInterpreterFromConfig()함수와PyInterpreterConfig를 추가했습니다. (더 자세한 정보는 PEP 684: 인터프리터별 GIL 를 참조하십시오.) (Eric Snow가 gh-104110 에서 기여했습니다.)제한된 C API 버전 3.12에서,
Py_INCREF()및Py_DECREF()함수는 구현 세부 사항을 숨기기 위해 불투명(opaque) 함수 호출로 구현됩니다. (Victor Stinner가 gh-105387 에서 기여했습니다.)
Python 3.12로 이식¶
Py_UNICODE*표기법에 기반한 레거시 유니코드 API가 제거되었습니다. UTF-8 또는wchar_t*기반의 API로 마이그레이션하십시오.PyArg_ParseTuple()과 같은 인자 파싱 함수는 더 이상Py_UNICODE*기반 형식(예:u,Z)을 지원하지 않습니다. 유니코드를 위해s,z,es,U와 같은 다른 형식을 사용하십시오.모든 정적 내장 타입에 대해
tp_weaklist``는 항상 ``NULL``입니다. 이는 ``PyTypeObject``의 내부 전용 필드이지만, 누군가 해당 필드에 직접 접근하는 경우를 대비하여 변경 사항을 알립니다. 오류 방지를 위해 기존 공개 C-API를 사용하거나, 필요한 경우 (내부 전용) ``_PyObject_GET_WEAKREFS_LISTPTR()매크로를 고려하십시오.이 내부 전용
PyTypeObject.tp_subclasses는 이제 유효한 객체 포인터가 아닐 수 있습니다. 이를 반영하기 위해 해당 타입이 void* 로 변경되었습니다. 누군가가 내부 전용 필드에 직접 접근하는 경우를 대비하여 이 내용을 언급합니다.서브 클래스 목록을 가져오려면 파이썬 메서드인
__subclasses__()를 호출하십시오(예를 들어,PyObject_CallMethod()사용).PyUnicode_FromFormat()및PyUnicode_FromFormatV()에 더 많은 서식 지정 옵션(왼쪽 정렬, 8진수, 대문자 16진수,intmax_t,ptrdiff_t,wchar_tC 문자열, 가변 너비 및 정밀도)에 대한 지원이 추가되었습니다. (Serhiy Storchaka가 gh-98836 에서 기여했습니다.)PyUnicode_FromFormat()및PyUnicode_FromFormatV()에서 인식할 수 없는 서식 문자는 이제SystemError를 발생시킵니다. 이전 버전에서는 나머지 서식 문자열이 결과 문자열에 그대로 복사되고, 추가 인자는 버려졌습니다. (Serhiy Storchaka가 gh-95781 에서 기여했습니다.)PyUnicode_FromFormat()및PyUnicode_FromFormatV()에서 잘못된 부호 위치를 수정했습니다. (Philip Georgi가 gh-95504 에서 기여했습니다.)__dict__또는 약한 참조 슬롯을 추가하려는 확장 클래스는tp_dictoffset및tp_weaklistoffset대신 각각Py_TPFLAGS_MANAGED_DICT와Py_TPFLAGS_MANAGED_WEAKREF를 사용해야 합니다.tp_dictoffset및tp_weaklistoffset을 사용하는 것도 여전히 지원되지만, 다중 상속(gh-95589)을 완벽하게 지원하지 않으며 성능이 떨어질 수 있습니다.Py_TPFLAGS_MANAGED_DICT를 선언하는 클래스는 인스턴스의 딕셔너리를 탐색하고 비우기 위해_PyObject_VisitManagedDict()및_PyObject_ClearManagedDict()를 호출해야 합니다. 약한 참조를 지우려면 이전과 같이PyObject_ClearWeakRefs()를 호출하십시오.PyUnicode_FSDecoder()함수는 더 이상bytearray및memoryview와 같은 바이트 라이크 경로를 허용하지 않습니다. 바이트 문자열의 경우 정확히bytes타입만 수락됩니다. (Victor Stinner가 gh-98393 에서 기여했습니다.)Py_CLEAR,Py_SETREF및Py_XSETREF매크로는 이제 인수를 한 번만 평가합니다. 인수에 부수 효과가 있는 경우, 더 이상 해당 효과가 중복되지 않습니다. (Victor Stinner가 gh-98724 에서 기여했습니다.)인터프리터의 에러 표시자가 이제 항상 정규화됩니다. 이는
PyErr_SetObject(),PyErr_SetString()및 에러 표시를 설정하는 다른 함수들이 예외를 저장하기 전에 먼저 정규화함을 의미합니다. (Mark Shannon이 gh-101578 에서 기여했습니다.)_Py_RefTotal은 더 이상 공식적인 값이 아니며, ABI 호환성을 위해 유지됩니다. 이는 내부 전역 변수이며 디버그 빌드에서만 사용할 수 있습니다. 만약 이를 사용하고 있다면_Py_GetGlobal_RefTotal()을 사용하기 시작해야 합니다.다음 함수들은 이제 새로 생성된 타입에 적절한 메타 클래스를 선택합니다:
메타 클래스가
tp_new를 재정의하는 클래스를 생성하는 것은 이제 폐지되었으며, Python 3.14부터는 허용되지 않습니다. 이러한 함수들은 메타 클래스의tp_new를 무시하므로 초기화가 불완전하게 수행될 수 있습니다.PyType_FromMetaclass()(Python 3.12에서 추가됨)는 이미 메타클래스가tp_new를 재정의하는 클래스를 생성하는 것을 허용하지 않습니다(Python에서는__new__()에 해당).tp_new가PyType_From*함수들이 수행하는 거의 모든 것을 재정의하기 때문에 두 기능은 서로 호환되지 않습니다. 타입 생성 과정 중 여러 단계에서 메타 클래스를 무시하는 기존 동작은 (메타) 클래스가tp_new가 호출되었다고 가정하기 때문에 일반적으로 안전하지 않습니다. 간단한 일반적인 해결책은 없습니다. 다음 방법 중 하나가 도움이 될 수 있습니다:메타 클래스를 직접 제어하는 경우, 그 안에서
tp_new를 사용하지 마십시오:초기화를 생략할 수 있는 경우, 대신
PyTypeObject.tp_init에서 수행할 수 있습니다.메타 클래스를 파이썬에서 인스턴스화할 필요가 없는 경우,
Py_TPFLAGS_DISALLOW_INSTANTIATION플래그를 사용하여 그tp_new``를 ``NULL``로 설정하십시오. 이렇게 하면 ``PyType_From*함수에서 사용할 수 있습니다.
PyType_From*함수들의 사용을 피하십시오: C 전용 기능(슬롯 또는 인스턴스 크기 설정)이 필요하지 않은 경우, 메타클래스를 호출하여 생성하십시오.tp_new를 안전하게 건너뛸 수 있다는 것을 확실히 알고 있는 경우, 파이썬의warnings.catch_warnings()를 사용하여 폐지 경고를 걸러내십시오.
PyOS_InputHook및PyOS_ReadlineFunctionPointer는 더 이상 subinterpreters 에서 호출되지 않습니다. 이는 클라이언트가 일반적으로 프로세스 전체의 전역 상태에 의존하기 때문입니다(이러한 콜백은 확장 모듈 상태를 복구할 방법이 없습니다).이는 또한 확장 프로그램이 지원하지 않거나(또는 아직 로드되지 않은) 서브 인터프리터에서 실행되는 상황을 방지합니다. 자세한 내용은 gh-104668 을 참조하십시오.
PyLongObject의 내부 구조가 성능 향상을 위해 변경되었습니다.PyLongObject의 내부는 비공개이지만 일부 확장 모듈에서 사용됩니다. 이제 내부 필드에 직접 접근해서는 안 되며, 대신PyLong_...으로 시작하는 API 함수를 사용해야 합니다. 단일 머신 워드에 들어가는PyLongObject값을 효율적으로 액세스하기 위해 두 개의 새로운 불안정(unstable) API 함수가 제공됩니다.PyMem_SetAllocator()를 통해 설정되는 사용자 정의 할당자는 메모리 영역에 관계없이 이제 스레드 안전해야 합니다. “훅”을 포함하여 자체 상태가 없는 할당량은 영향을 받지 않습니다. 사용 중인 커스텀 할당자가 스레드 안전하지 않아 안내가 필요한 경우, 새 GitHub 이슈를 생성하고@ericsnowcurrently를 참조하십시오.
폐지됨¶
PEP 699 에 따라, 확장 모듈용
PyDictObject의ma_version_tag필드가 폐지되었습니다. 이 필드에 액세스하면 컴파일 시점에 경고가 발생합니다. 이 필드는 Python 3.14에서 제거됩니다. (Ramvikrams와 Kumar Aditya가 gh-101193 에서 기여했습니다. PEP은 Ken Jin이 제안했습니다.)전역 구성 변수 폐지:
Py_DebugFlag:PyConfig.parser_debug를 사용하십시오.Py_VerboseFlag:PyConfig.verbose를 사용하십시오.Py_QuietFlag:PyConfig.quiet를 사용하십시오.Py_InteractiveFlag:PyConfig.interactive를 사용하십시오.Py_InspectFlag:PyConfig.inspect를 사용하십시오.Py_OptimizeFlag:PyConfig.optimization_level를 사용하십시오.Py_NoSiteFlag:PyConfig.site_import를 사용하십시오.Py_BytesWarningFlag: 대신PyConfig.bytes_warning을(를) 사용하십시오.Py_FrozenFlag: 대신PyConfig.pathconfig_warnings을(를) 사용하십시오.Py_IgnoreEnvironmentFlag: 대신PyConfig.use_environment을(를) 사용하십시오.Py_DontWriteBytecodeFlag: 대신PyConfig.write_bytecode을(를) 사용하십시오.Py_NoUserSiteDirectory: 대신PyConfig.user_site_directory을(를) 사용하십시오.Py_UnbufferedStdioFlag: 대신PyConfig.buffered_stdio을(를) 사용하십시오.Py_HashRandomizationFlag: 대신PyConfig.use_hash_seed및PyConfig.hash_seed를(를) 사용하십시오.Py_IsolatedFlag: 대신PyConfig.isolated을(를) 사용하십시오.Py_LegacyWindowsFSEncodingFlag: 대신PyPreConfig.legacy_windows_fs_encoding을(를) 사용하십시오.Py_LegacyWindowsStdioFlag: 대신PyConfig.legacy_windows_stdio을(를) 사용하십시오.Py_FileSystemDefaultEncoding: 대신PyConfig.filesystem_encoding을(를) 사용하십시오.Py_HasFileSystemDefaultEncoding: 대신PyConfig.filesystem_encoding을(를) 사용하십시오.Py_FileSystemDefaultEncodeErrors: 대신PyConfig.filesystem_errors을(를) 사용하십시오.Py_UTF8Mode: 대신PyPreConfig.utf8_mode를(를) 사용하십시오. (Py_PreInitialize()참조)
Py_InitializeFromConfig()API는 대신PyConfig와(과) 함께 사용되어야 합니다. (Victor Stinner가 gh-77782 에서 기여함.)변형 가능한(mutable) 베이스를 가진
불변 타입을 생성하는 것은 더 이상 권장되지 않으며(deprecated), Python 3.14에서 비활성화될 예정입니다. (gh-95388)structmember.h헤더는 더 이상 권장되지 않으나(deprecated), 계속 사용할 수 있으며 삭제 계획도 없습니다.해당 내용은 이제
Python.h`를 포함하는 것만으로도 사용할 수 있으며, 누락된 경우 ``Py`접두사가 추가됩니다.Py_T_INT,Py_T_DOUBLE등과 같은 타입 매크로(이전의T_INT,T_DOUBLE등).Py_READONLY(이전의READONLY) 및Py_AUDIT_READ(이전의 모든 대문자 표현) 플래그
Python.h에서 노출되지 않는 항목들이 있습니다:T_OBJECT(대신Py_T_OBJECT_EX를 사용하십시오)T_NONE(이전에는 문서화되지 않았으며 상당히 특이한 표현이었음)아무것도 하지 않는 매크로인
WRITE_RESTRICTED.Py_AUDIT_READ의 동등한 표현인RESTRICTED및READ_RESTRICTED매크로.일부 구성에서
Python.h가<stddef.h>를 포함하지 않습니다.offsetof()를 사용할 때는 이를 수동으로 포함해야 합니다.
더 이상 권장되지 않는(deprecated) 헤더도 기존 이름으로 원래의 내용을 계속 제공합니다. 추가적인 포함이나 네임스페이스가 없는 매크로가 크게 문제가 되지 않는다면 이전 코드를 그대로 유지할 수 있습니다.
(Petr Viktorin이 gh-47146 에서 기여했으며, Alexander Belopolsky와 Matthias Braun의 이전 작업을 기반으로 함.)
PyErr_Fetch()및PyErr_Restore()는 더 이상 권장되지 않습니다. 대신PyErr_GetRaisedException()과PyErr_SetRaisedException()을 사용하십시오. (Mark Shannon이 gh-101578 에서 기여함.)PyErr_Display()는 더 이상 권장되지 않습니다. 대신PyErr_DisplayException()을 사용하십시오. (Irit Katriel이 gh-102755 에서 기여함.)_PyErr_ChainExceptions는 더 이상 권장되지 않습니다. 대신_PyErr_ChainExceptions1을 사용하십시오. (Irit Katriel이 gh-102192 에서 기여함.)tp_new를 재정의하는 메타클래스를 가진 클래스를 생성하기 위해PyType_FromSpec(),PyType_FromSpecWithBases()또는PyType_FromModuleAndSpec()을 사용하는 것은 더 이상 권장되지 않습니다. 대신 해당 메타클래스를 호출하십시오.
Python 3.14에서 삭제 예정¶
확장 모듈을 위한
PyDictObject의ma_version_tag필드(PEP 699; gh-101193).
Python 3.15에서 제거 예정¶
PyImport_ImportModuleNoBlock()대신 :c:func:`PyImport_ImportModule`을(를) 사용하십시오.PyWeakref_GetObject()및PyWeakref_GET_OBJECT(): 대신 :c:func:`PyWeakref_GetRef`를 사용하십시오. Python 3.12 이하 버전에서 :c:func:`PyWeakref_GetRef`를 얻으려면 `pythoncapi-compat 프로젝트 <https://github.com/python/pythoncapi-compat/>`__를 사용할 수 있습니다.PyUnicode_AsDecodedObject(): 대신PyCodec_Decode()를 사용하십시오.PyUnicode_AsDecodedUnicode()대신 :c:func:`PyCodec_Decode`를 사용하십시오. 일부 코덱(예: “base64”)은 :class:`str`이 아닌 :class:`bytes`와 같은 다른 유형을 반환할 수 있음에 유의하십시오.PyUnicode_AsEncodedObject(): 대신PyCodec_Encode()를 사용하십시오.PyUnicode_AsEncodedUnicode()대신 :c:func:`PyCodec_Encode`를 사용하십시오. 일부 코덱(예: “base64”)은 :class:`bytes`가 아닌 :class:`str`과 같은 다른 유형을 반환할 수 있음에 유의하십시오.Python 3.13에서 사용이 중단된(deprecated) 파이썬 초기화 함수들:
Py_GetPath()대신PyConfig_Get("module_search_paths")(sys.path)를(를) 사용하십시오.Py_GetPrefix(): 대신PyConfig_Get("base_prefix")(sys.base_prefix)를 사용하십시오. 가상 환경 처리가 필요한 경우에는PyConfig_Get("prefix")(sys.prefix)를 사용하십시오.Py_GetExecPrefix(): 대신PyConfig_Get("base_exec_prefix")(sys.base_exec_prefix)를 사용하십시오. 가상 환경 처리가 필요한 경우에는PyConfig_Get("exec_prefix")(sys.exec_prefix)를 사용하십시오.Py_GetProgramFullPath(): 대신PyConfig_Get("executable")(sys.executable)를 사용하십시오.Py_GetProgramName(): 대신PyConfig_Get("executable")(sys.executable)를 사용하십시오.Py_GetPythonHome(): 대신PyConfig_Get("home")또는PYTHONHOME환경 변수를 사용하십시오.
Python 3.13 및 이전 버전에서 :c:func:`PyConfig_Get`을 사용하려면 `pythoncapi-compat 프로젝트 <https://github.com/python/pythoncapi-compat/>`__를 활용할 수 있습니다.
Python 3.16에서 제거 예정¶
Python의 초기화를 구성하는 함수(Python 3.11에서 폐지됨):
PySys_SetArgvEx(): 대신PyConfig.argv를 설정하십시오.PySys_SetArgv(): 대신PyConfig.argv를 설정하십시오.Py_SetProgramName(): 대신PyConfig.program_name을 설정하십시오.Py_SetPythonHome(): 대신PyConfig.home을 설정하십시오.
Py_InitializeFromConfig()API는 대신PyConfig와 함께 사용되어야 합니다.전역 구성 변수:
Py_DebugFlag: 대신PyConfig.parser_debug또는PyConfig_Get("parser_debug")을 사용하십시오.Py_VerboseFlag: 대신PyConfig.verbose또는PyConfig_Get("verbose")을 사용하십시오.Py_QuietFlag: 대신PyConfig.quiet또는PyConfig_Get("quiet")을 사용하십시오.Py_InteractiveFlag: 대신PyConfig.interactive또는PyConfig_Get("interactive")을 사용하십시오.Py_InspectFlag: 대신PyConfig.inspect또는PyConfig_Get("inspect")을 사용하십시오.Py_OptimizeFlag: 대신PyConfig.optimization_level또는PyConfig_Get("optimization_level")을 사용하십시오.Py_NoSiteFlag: 대신PyConfig.site_import또는PyConfig_Get("site_import")을 사용하십시오.Py_BytesWarningFlag: 대신PyConfig.bytes_warning또는PyConfig_Get("bytes_warning")을 사용하십시오.Py_FrozenFlag: 대신PyConfig.pathconfig_warnings또는PyConfig_Get("pathconfig_warnings")을 사용하십시오.Py_IgnoreEnvironmentFlag: 대신PyConfig.use_environment또는PyConfig_Get("use_environment")을 사용하십시오.Py_DontWriteBytecodeFlag: 대신PyConfig.write_bytecode또는PyConfig_Get("write_bytecode")을 사용하십시오.Py_NoUserSiteDirectory: 대신PyConfig.user_site_directory또는PyConfig_Get("user_site_directory")을 사용하십시오.Py_UnbufferedStdioFlag: 대신PyConfig.buffered_stdio또는PyConfig_Get("buffered_stdio")을 사용하십시오.Py_HashRandomizationFlag: 대신PyConfig.use_hash_seed및PyConfig.hash_seed또는PyConfig_Get("hash_seed")을 사용하십시오.Py_IsolatedFlag: 대신PyConfig.isolated또는PyConfig_Get("isolated")을 사용하십시오.Py_LegacyWindowsFSEncodingFlag: 대신PyPreConfig.legacy_windows_fs_encoding또는PyConfig_Get("legacy_windows_fs_encoding")을 사용하십시오.Py_LegacyWindowsStdioFlag: 대신PyConfig.legacy_windows_stdio또는PyConfig_Get("legacy_windows_stdio")을 사용하십시오.Py_FileSystemDefaultEncoding,Py_HasFileSystemDefaultEncoding: 대신PyConfig.filesystem_encoding또는PyConfig_Get("filesystem_encoding")을 사용하십시오.Py_FileSystemDefaultEncodeErrors: 대신PyConfig.filesystem_errors또는PyConfig_Get("filesystem_errors")을 사용하십시오.Py_UTF8Mode: 대신PyPreConfig.utf8_mode또는PyConfig_Get("utf8_mode")을 사용하십시오. (Py_PreInitialize()참조)
이 옵션들을 설정하려면
Py_InitializeFromConfig()API를PyConfig와 함께 사용해야 합니다. 또는 런타임에 이 옵션들을 가져오려면PyConfig_Get()을 사용할 수 있습니다.PEP 393 에 의해 폐지된
Py_UNICODE.
향후 버전에서 제거 예정¶
다음 API들은 현재 구체적인 제거 날짜가 정해지지는 않았으나 향후 삭제될 예정입니다.
Py_TPFLAGS_HAVE_FINALIZE: Python 3.8부터 필요하지 않습니다.PyErr_Fetch(): 대신PyErr_GetRaisedException()을 사용하십시오.PyErr_NormalizeException()대신PyErr_GetRaisedException()을(를) 사용하십시오.PyErr_Restore(): 대신PyErr_SetRaisedException()을 사용하십시오.PyModule_GetFilename(): 대신PyModule_GetFilenameObject()를 사용하십시오.PyOS_AfterFork(): 대신PyOS_AfterFork_Child()를 사용하십시오.PySlice_GetIndicesEx(): 대신PySlice_Unpack()및PySlice_AdjustIndices()를 사용하십시오.PyUnicode_READY(): Python 3.12부터 필요하지 않습니다.PyErr_Display(): 대신PyErr_DisplayException()을 사용하십시오._PyErr_ChainExceptions(): 대신_PyErr_ChainExceptions1()을 사용하십시오.PyBytesObject.ob_shash멤버: 대신PyObject_Hash()를 호출하십시오.Thread Local Storage (TLS) API:
PyThread_create_key(): 대신PyThread_tss_alloc()을 사용하십시오.PyThread_delete_key(): 대신PyThread_tss_free()을 사용하십시오.PyThread_set_key_value(): 대신PyThread_tss_set()을 사용하십시오.PyThread_get_key_value(): 대신PyThread_tss_get()을 사용하십시오.PyThread_delete_key_value(): 대신PyThread_tss_delete()를 사용하십시오.PyThread_ReInitTLS(): Python 3.7부터 필요하지 않습니다.
제거됨¶
token.h헤더 파일을 제거합니다. 공개적인 토크나이저 C API는 존재한 적이 없으며,token.h헤더 파일은 오직 Python 내부용으로만 설계되었습니다. (Victor Stinner가 gh-92651 에서 기여함.)레거시 유니코드 API가 제거되었습니다. 자세한 내용은 PEP 623 을 참조하십시오.
PyUnicode_WCHAR_KINDPyUnicode_AS_UNICODE()PyUnicode_AsUnicode()PyUnicode_AsUnicodeAndSize()PyUnicode_AS_DATA()PyUnicode_FromUnicode()PyUnicode_GET_SIZE()PyUnicode_GetSize()PyUnicode_GET_DATA_SIZE()
PyUnicode_InternImmortal()함수 매크로를 제거합니다. (Victor Stinner가 gh-85858 에서 기여함.)