Python

Python 3.16의 새로운 기능

편집자:

TBD

이 문서는 3.15와 비교하여 Python 3.16에 추가된 새로운 기능들을 설명합니다.

자세한 내용은 변경 로그 를 참조하십시오.

참고

사전 출시 사용자는 이 문서가 현재 초안 상태임을 유의해야 합니다. Python 3.16이 정식 출시로 향함에 따라 내용이 대폭 업데이트될 예정이므로, 이전 버전을 읽은 후에도 다시 확인해 볼 가치가 있습니다.

요약 — 출시 주요 사항

새 기능

기타 언어 변경 사항들

새 모듈

  • 아직 없음.

개선된 모듈

curses

gzip

  • gzip.open() 이 이제 GzipFile 클래스의 생성자에 전달되는 선택적 인자 mtime 을 수락합니다. (Marin Misur가 gh-91372 에서 기여함.)

io

  • 위치를 이동하지 않고 읽는 io.BytesIO.peek() 메서드를 추가합니다. (Marcel Martin이 gh-90533 에서 기여했습니다.)

logging

  • TimedRotatingFileHandler 는 이제 OS 및 파일 시스템이 지원하는 경우, 핸들러 생성 후 첫 회전의 기준으로 기존 로그 파일의 마지막 수정 시간 대신 생성 시간을 사용합니다. 이를 통해 회전 간격이 만료되기 전에 종료되는 단기 실행 프로그램에서도 사용할 수 있습니다. (Iván Márton과 Serhiy Storchaka가 gh-84649 에서 기여함.)

lzma

  • lzma.FILTER_ARM64lzma.FILTER_RISCV 를 통해 새로운 BCJ 필터인 ARM64와 RISC-V 지원을 추가했습니다. 새로운 필터는 런타임 라이브러리가 지원하는 경우에만 작동합니다. ARM64 필터는 lzma 5.4.0 이상이 필요하며, RISC-V는 5.6.0 이상이 필요합니다. (Chien Wong이 gh-115988 에서 기여함.)

math

os

  • pidfd를 통해 다른 프로세스의 파일 기술자를 복제하는 os.pidfd_getfd() 를 추가했습니다. Linux 5.6+ 이상에서 사용 가능합니다. (Maurycy Pawłowski-Wieroński가 gh-149464 에서 기여함.)

re

  • re 는 이제 Unicode Technical Standard #18 <https://unicode.org/reports/tr18/> 에 기술된 대로 문자 클래스 내에서 집합 연산과 중첩된 집합을 지원합니다. 즉, 대괄호로 쓰인 중첩된 집합이 피연산자가 될 수 있는 집합 차집합([A--B]), 교집합([A&&B]) 및 합집합([A||B])이 가능합니다. 예를 들어, [a-z--[aeiou]] 는 ASCII 소문자 자음을 매칭합니다. (Serhiy Storchaka가 gh-152100 에서 기여함.)

  • 정규식은 이제 Unicode 속성으로 문자를 매칭하는 Unicode 속성 이스케이프 \p{...}\P{...} 를 지원합니다. 예를 들어 \p{Lu} (대문자), \p{Cased} 또는 \p{ASCII} 등이 있습니다. 지원되는 속성은 the regular expression syntax 를 참조하십시오. (Serhiy Storchaka가 gh-95555 에서 기여했습니다.)

shlex

  • shlex.quote() 에 키워드 전용 매개변수 force 를 추가하여, 인용되지 않아도 셸에서 안전한 문자열을 강제로 인용할 수 있게 했습니다. (Jay Berry가 gh-148846 에서 기여함.)

tkinter

  • Tk 9.1의 강화된 ttk::treeview 위젯 명령을 포함하는 여러 tkinter.ttk.Treeview 메서드(예: sort(), search(), expand(), collapse(), hide(), unhide() 및 셀 포커스, 선택, 태그용 메서드)를 추가했습니다. 재귀가 없는 expand()collapse() 메서드는 9.1 미만 버전의 Tk에서도 작동합니다. (Serhiy Storchaka가 gh-151910 에서 기여함.)

  • undo 또는 redo가 가능한지 여부를 반환하는 새로운 tkinter.Text 메서드인 edit_canundo()edit_canredo() 를 추가했습니다. (Serhiy Storchaka가 gh-151674 에서 기여하였습니다.)

  • 표시된 뷰와 기본 텍스트 간의 동기화를 제어하고 보고하는 새로운 tkinter.Text 메서드인 sync()pendingsync() 를 추가했습니다. (Serhiy Storchaka가 gh-151675 에서 기여했습니다.)

  • 테마에 정의된 스타일 목록을 반환하는 ttk.Style.theme_styles 메서드를 추가했습니다. (Serhiy Storchaka가 gh-151920 에서 기여함.)

  • 캔버스 아이템의 텍스트 또는 좌표를 대체하는 rchars() 와 캔버스 아이템의 좌표를 회전시키는 rotate() 등 새로운 tkinter.Canvas 메서드들을 추가했습니다. (Serhiy Storchaka가 gh-151876 에서 기여함.)

  • tkinter.Entrytkinter.Spinbox 위젯에 유효성 검사 명령의 평가를 강제하는 validate() 메서드를 추가했습니다. (Serhiy Storchaka가 gh-151878 에서 기여함.)

  • tkinter.Menu.postcascade() 메서드와, 각각 표시 크기 조정 계수를 질의/설정하고 사용자의 유휴 시간을 보고하는 tk_scaling()tk_inactive() 메서드를 추가했습니다. (Serhiy Storchaka가 gh-151881 에서 기여함.)

  • 새로운 창 관리 메서드인 winfo_isdark() (다크 모드 감지), wm_iconbadge() (애플리케이션 아이콘 배지) 및 wm_stackorder() (최상위 스택 순서)를 추가했습니다. (Serhiy Storchaka가 gh-151874 에서 기여함.)

  • 애플리케이션 전송 이름, X 입력 메서드 상태 및 입력 방법의 커서 위치를 노출하는 tk_appname(), tk_useinputmethods()tk_caret() 메서드를 추가했습니다. (Serhiy Storchaka가 gh-151886 에서 기여함.)

  • tkinter.PhotoImage 메서드에서 더 많은 옵션을 지원하게 되었습니다: put()format 매개변수, put(), read(), write()data()metadata 매개변수, 그리고 get()withalpha 매개변수가 추가되었습니다. (Serhiy Storchaka가 gh-151890 에서 기여함.)

  • 데이터가 조각으로 제공되었을 때 디더링된 이미지를 다시 계산하는 redither() 메서드를 추가했습니다. (Serhiy Storchaka가 gh-151888 에서 기여함.)

  • tkinter.OptionMenu 가 이제 임의의 tkinter.Menubutton 옵션을 키워드 인자로 수락하며, 이를 통해 기본 외형을 재정의할 수도 있습니다. (Serhiy Storchaka가 gh-101284 에서 기여함.)

  • tkinter.simpledialog 대화 상자가 기본 Tk 대화 상자의 모습과 느낌에 맞도록 현대화되었습니다. tkinter.simpledialog.SimpleDialogaskinteger(), askfloat(), askstring() 대화 상자는 이제 기존의 tkinter 위젯 대신 테마가 적용된 tkinter.ttk 위젯으로 구성됩니다. 호환성을 위해 tkinter.simpledialog.Dialog 기본 클래스는 여전히 기본 위젯을 사용합니다. DialogSimpleDialog 모두는 기존 Tk 위젯과 테마가 적용된 ttk 위젯 중 하나를 선택하는 use_ttk 매개변수를 갖게 되었습니다. 또한 SimpleDialogbitmapdetail 매개변수를 추가로 얻었으며, ttk 버전에서는 테마 이미지를 사용하여 표준 아이콘을 그리며, buttons 항목으로 버튼 옵션 맵핑을 수락합니다. (Serhiy Storchaka가 gh-59396 에서 기여함.)

xml

  • XML 파서 에서 다양한 멀티바이트 인코딩인 “cp932”, “cp949”, “cp950”, “Big5”, “EUC-JP”, “GB2312”, “GBK”, “johab”, “Shift_JIS” 지원을 추가했습니다. 또한 “Big5-HKSCS”, “EUC_JIS-2004”, “EUC_JISX0213”, “Shift_JIS-2004”, “Shift_JISX0213”, “utf-8-sig” 및 하이픈이 없는 “UTF8”과 같은 비표준 별칭에 대한 부분 지원(BMP 문자만)을 추가했습니다. 파서는 이제 ASCII가 아닌 데이터를 마주했을 때, 나중에 실패하는 대신 “ISO-2022-JP”나 “raw-unicode-escape”와 같이 지원되지 않는 것으로 알려진 멀티바이트 인코딩의 경우 ValueError 를 발생시킵니다. (Serhiy Storchaka가 gh-62259 에서 기여함.)

zipfile

  • 아카이브의 중앙 디렉토리에서 멤버를 제거하는 ZipFile.remove() 와 제거된 멤버의 로컬 파일 항목이 사용하던 공간을 회수하는 ZipFile.repack() 을 추가했습니다. (Danny Lin이 gh-51067 에서 기여함.)

최적화

re

  • 문자 집합 밖의 문자 클래스 이스케이프(\d, \D, \s, \S, \w\W)와 단일 이스케이프를 포함하는 문자 집합(예: [\d] 또는 [^\s])이 이제 IN 블록으로 감싸지는 대신 단일 CATEGORY 연산자로 컴파일됩니다. 이는 \d+ 와 같은 패턴의 매칭 속도를 높이고 컴파일된 바이트 코드의 크기를 줄여줍니다. (Serhiy Storchaka가 gh-152033 에서, Pieter Eendebak이 gh-152056 에서 기여했습니다.)

module_name

  • TODO

제거됨

annotationlib

array

  • 문서에서는 파이썬 3.3부터, 런타임에서는 파이썬 3.13부터 사용 지원이 중단된 'u' 포맷 코드(wchar_t)입니다. 대신 'w' 포맷 코드(Py_UCS4, 항상 4바이트)를 사용하십시오.

asyncio

  • 파이썬 3.14부터 사용 지원이 중단된 asyncio.iscoroutinefunction() 입니다. 대신 inspect.iscoroutinefunction() 을 사용하십시오.

  • asyncio.AbstractEventLoopPolicy, asyncio.DefaultEventLoopPolicy, asyncio.WindowsSelectorEventLoopPolicy, asyncio.WindowsProactorEventLoopPolicy 클래스와 asyncio.get_event_loop_policy(), asyncio.set_event_loop_policy() 함수를 포함한 이벤트 루프 정책 시스템은 Python 3.14부터 폐지되었습니다. 대신 asyncio.run() 또는 사용자 정의 loop_factory 가 포함된 asyncio.Runner 를 사용하십시오.

functools

  • 파이썬 3.14부터 functools.reduce() 의 파이썬 구현을 호출할 때 function 또는 sequence 를 키워드 인자로 사용하는 방식이 사용 지원 중단되었습니다.

logging

  • strm 인자를 사용하는 사용자 정의 로깅 처리기(custom logging handlers) 지원이 중단되었으며 파이썬 3.16에서 제거될 예정입니다. 대신 stream 인자를 사용하여 처리기를 정의하십시오.

mimetypes

shutil

  • 파이썬 3.14부터 사용 지원이 중단된 ExecError 예외입니다. 파이썬 3.4 이후로 shutil 의 어떤 함수에서도 사용되지 않았습니다. (Stan Ulbrych가 gh-149567 에서 기여함.)

symtable

  • 파이썬 3.14부터 사용 지원이 중단된 symtable.Class.get_methods() 메서드입니다.

sys

  • 파이썬 3.13부터 사용 지원이 중단된 _enablelegacywindowsfsencoding() 함수입니다. 대신 PYTHONLEGACYWINDOWSFSENCODING 환경 변수를 사용하십시오. (Stan Ulbrych가 gh-149595 에서 기여함.)

sysconfig

  • 파이썬 3.14부터 사용 지원이 중단된 sysconfig.expand_makefile_vars() 함수입니다. 대신 sysconfig.get_paths()vars 인자를 사용하십시오. (Stan Ulbrych가 gh-149499 에서 기여함.)

tarfile

  • 문서화되지도 사용되지도 않는 tarfile.TarFile.tarfile 어트리뷰트가 파이썬 3.13부터 사용 지원 중단되었습니다.

사용 지원 중단됨

새로운 폐지 사항

  • abc

  • ast:

    • 파이썬 3.9부터 폐지된 slice, Index, ExtSlice, Suite, Param, AugLoadAugStore 클래스는 더 이상 from ast import * 에 의해 가져오기(import)되지 않으며 사용 시 경고를 발생시킵니다. 이 클래스들은 파이썬 3.21에서 제거될 예정입니다. 이 타입들은 파서에 의해 생성되지 않으며 코드 생성기에 의해 수용되지 않습니다.

    • 파이썬 3.9부터 폐지된 ast.Tuple 객체의 dims 속성이 이제 사용 시 경고를 발생시킵니다. 이 속성은 3.21에서 제거될 예정입니다. 대신 ast.Tuple.elts 를 사용하십시오.

파이썬 3.17에서 삭제 예정

  • datetime:

    • 연도 정보 없이 %e (월의 일수)를 포함하는 포맷 문자열을 사용하는 strptime() 호출이 파이썬 3.15부터 사용 중단되었습니다. (Stan Ulbrych가 gh-70647 에서 기여)

  • collections.abc:

    • collections.abc.ByteString 은 파이썬 3.17에서 제거될 예정입니다.

      런타임에 objbuffer protocol 을 구현하는지 확인하려면 isinstance(obj, collections.abc.Buffer) 를 사용하십시오. 타입 어노테이션에 사용할 때는 Buffer 를 사용하거나 코드에서 지원하는 유형을 명시적으로 지정하는 유니온(예: bytes | bytearray | memoryview)을 사용하십시오.

      ByteString 은 원래 bytesbytearray 모두의 상위 타입 역할을 하는 추상 클래스로 설계되었습니다. 하지만 이 ABC에 메서드가 전혀 없었기 때문에, 어떤 객체가 ByteString 의 인스턴스라는 사실이 객체에 대한 유용한 정보를 제공하지 못했습니다. 또한 memoryview 와 같은 다른 일반적인 버퍼 타입들도 런타임이나 정적 타입 검사에서 ByteString 의 하위 유형으로 인식되지 않았습니다.

      자세한 내용은 PEP 688 을 참조하십시오. (Shantanu Jain이 gh-91896 에서 제안함.)

  • encodings:

    • encodings.normalize_encoding() 에 ASCII가 아닌 인코딩 이름을 전달하는 것은 사용 중단되었으며 파이썬 3.17에서 제거될 예정입니다. (Stan Ulbrych가 gh-136702 에서 기여)

  • webbrowser:

    • webbrowser.MacOSXOSAScript`은 :class:!webbrowser.MacOS`로 대체됨에 따라 사용 중단되었습니다. (gh-137586)

  • typing:

    • 파이썬 3.14 이전에는 구식 유니온(union)이 비공개 클래스 typing._UnionGenericAlias 를 사용하여 구현되었습니다. 이 클래스는 구현에 더 이상 필요하지 않지만, 하위 호환성을 위해 유지되고 있으며 파이썬 3.17에서 제거될 예정입니다. 사용자는 비공개 구현 세부 사항에 의존하는 대신 typing.get_origin()typing.get_args() 와 같은 문서화된 인트로스펙션 도우미를 사용해야 합니다.

    • typing.ByteString 은 파이썬 3.9부터 사용 중단되었으며 파이썬 3.17에서 제거될 예정입니다.

      런타임에 objbuffer protocol 을 구현하는지 확인하려면 isinstance(obj, collections.abc.Buffer) 를 사용하십시오. 타입 어노테이션에 사용할 때는 Buffer 를 사용하거나 코드에서 지원하는 유형을 명시적으로 지정하는 유니온(예: bytes | bytearray | memoryview)을 사용하십시오.

      ByteString 은 원래 bytesbytearray 모두의 상위 타입 역할을 하는 추상 클래스로 설계되었습니다. 하지만 이 ABC에 메서드가 전혀 없었기 때문에, 어떤 객체가 ByteString 의 인스턴스라는 사실이 객체에 대한 유용한 정보를 제공하지 못했습니다. 또한 memoryview 와 같은 다른 일반적인 버퍼 타입들도 런타임이나 정적 타입 검사에서 ByteString 의 하위 유형으로 인식되지 않았습니다.

      자세한 내용은 PEP 688 을 참조하십시오. (Shantanu Jain이 gh-91896 에서 제안함.)

  • tkinter:

    • tkinter.Variable`의 메서드인 :meth:!trace_variable`, trace`(:meth:()!trace_variable`의 별칭), trace_vdelete(), 그리고 trace_vinfo`는 Python 3.14부터 폐지되었으며 Python 3.17에서 제거될 예정입니다. 대신 :meth:()!trace_add`, trace_remove(), 및 :meth:`!trace_info`를 사용하십시오. (Serhiy Storchaka가 :gh:`120220`에서 기여함.)

파이썬 3.18에서 제거 예정

  • 파일 디스크립터가 필요한 경우 더 이상 불리언(boolean) 값을 허용하지 않습니다. (Serhiy Storchaka가 gh-82626 을 통해 기여함.)

  • decimal:

    • 표준이 아니며 문서화되지 않은 Decimal 형식 지정자 'N'decimal 모듈의 C 구현에서만 지원되며, 파이썬 3.13부터 사용이 권장되지 않습니다. (Serhiy Storchaka가 gh-89902 를 통해 기여함.)

  • PEP 829 에 의해 정의된 기능 중단 사항:

    • name.pth 파일의 import 라인은 무시됩니다.

    (Barry Warsaw가 gh-148641 을 통해 기여함.)

Python 3.19에서 삭제 예정

  • ctypes:

    • 윈도우가 아닌 플랫폼에서 :attr:`~ctypes.Structure._layout_`은 설정하지 않고 :attr:`~ctypes.Structure._pack_`를 설정하여 MSVC 호환 구조체 레이아웃으로 암시적으로 전환합니다.

  • hashlib:

    • new() 와 같은 해시 함수 생성자나 md5(), sha256() 과 같은 직접적인 해시 명칭을 가진 생성자에서, 선택적 초기 데이터 매개변수로 다양한 hashlib 구현체에 따라 data= 또는 string= 라는 이름의 키워드 인수를 전달할 수 있습니다.

      string 키워드 인자 명칭에 대한 지원은 현재 사용 중단(deprecated)되었으며, Python 3.19에서 삭제될 예정입니다.

      Python 3.13 이전에는 해시 함수 백엔드 구현에 따라 string 키워드 매개변수가 올바르게 지원되지 않았습니다. 최대한의 하위 호환성을 위해 초기 데이터를 위치 인자로 전달하는 것을 권장합니다.

  • http.cookies:

  • imaplib:

    • 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__, versionVERSION 속성은 폐지되었으며 파이썬 3.20에서 제거될 예정입니다. 대신 sys.version_info 를 사용하십시오.

    (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에서 삭제 예정

  • abc

  • ast:

    • slice, Index, ExtSlice, Suite, Param, AugLoadAugStore 클래스는 Python 3.21에서 제거됩니다. 이 타입들은 파서에 의해 생성되지 않으며 코드 생성기에서도 수용되지 않습니다.

    • ast.Tuple``의 ``dims 속성은 Python 3.21에서 제거됩니다. 대신 ast.Tuple.elts 속성을 사용하십시오.

향후 버전에서 제거 예정

다음 API는 향후 제거될 예정이나, 현재로서는 구체적인 제거 날짜가 정해지지 않았습니다.

  • argparse:

    • 인수 그룹 중첩 및 상호 배타적인 그룹을 중첩하는 기능은 더 이상 권장되지 않습니다(deprecated).

    • add_argument_group() 에 문서화되지 않은 키워드 인자 prefix_chars 를 전달하는 것은 이제 권장되지 않습니다.

    • argparse.FileType 유형 변환기가 더 이상 권장되지 않습니다.

  • builtins:

    • 제너레이터: 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, isor 중 하나가 오면 구문 경고가 발생합니다. 향후 릴리스에서는 이를 구문 오류로 변경할 예정입니다. (gh-87999)

    • 비정수형(non-int)을 반환하는 __index__()__int__() 메서드에 대한 지원이 중단됩니다. 이 메서드들은 이제 반드시 int 의 엄격한 하위 클래스 인스턴스를 반환해야 합니다.

    • float`의 엄격한 하위 클래스를 반환하는 ``__float__()` 메서드에 대한 지원이 중단됩니다. 이 메서드는 이제 반드시 float 인스턴스를 반환해야 합니다.

    • complex`의 엄격한 하위 클래스를 반환하는 ``__complex__()` 메서드에 대한 지원이 중단됩니다. 이 메서드는 이제 반드시 complex 인스턴스를 반환해야 합니다.

    • complex() 생성자에서 복소수를 real 또는 imag 인자로 전달하는 것은 이제 권장되지 않습니다. 복소수는 단일 위치 인자로만 전달해야 합니다. (Serhiy Storchaka가 gh-109218 을 통해 구현함.)

  • calendar: calendar.Januarycalendar.February 상수는 더 이상 사용되지 않으며(deprecated), 대신 calendar.JANUARYcalendar.FEBRUARY 로 대체됩니다. (Prince Roshan이 gh-103636 에서 제안함.)

  • codecs: codecs.open() 대신 open`을 사용하십시오. (:gh:`133038())

  • codeobject.co_lnotab 대신 codeobject.co_lines() 메서드를 사용하십시오.

  • datetime:

    • utcnow(): 대신 datetime.datetime.now(tz=datetime.UTC) 를 사용하십시오.

    • utcfromtimestamp(): 대신 datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC) 를 사용하십시오.

  • :mod:`gettext: 복수형 값은 정수여야 합니다.`

  • importlib:

    • cache_from_source()debug_override 매개 변수가 폐지되었습니다. 대신 optimization 매개 변수를 사용하십시오.

  • importlib.metadata:

    • 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_SSLv3

    • ssl.PROTOCOL_TLS

    • ssl.PROTOCOL_TLSv1

    • ssl.PROTOCOL_TLSv1_1

    • ssl.PROTOCOL_TLSv1_2

    • ssl.TLSVersion.SSLv3

    • ssl.TLSVersion.TLSv1

    • ssl.TLSVersion.TLSv1_1

  • threading 메서드들:

  • typing.Text (gh-92332):

  • 내부 클래스 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() 를 사용하십시오.

Python 3.16으로의 이식

이 섹션은 이전에 설명된 변경 사항과 코드를 수정해야 할 수도 있는 기타 버그 수정을 나열합니다.

  • tkinter 에서 wait_variable(), setvar()getvar() 메서드의 name 파라미터와 setvar()value 파라미터가 이제 필수 항목입니다. 이전에 각각 'PY_VAR'''1'' 이 기본값이었던 해당 파라미터 없이 메서드를 호출하면 이제 TypeError 가 발생합니다. (Serhiy Storchaka가 gh-152587 을 통해 제공함.)

빌드 변경

  • 유지관리 및 업데이트를 간소화하기 위해 CPython 소스 트리에서 포함된 libmpdec decimal 라이브러리 사본을 제거합니다. 이제 decimal 모듈은 무조건 시스템의 libmpdec decimal 라이브러리를 사용합니다. 또한 더 이상 사용되지 않는 --with-system-libmpdec configure 플래그도 제거합니다. 이 변경 사항은 지난 몇 차례 동안 별도의 libmpdec 사본을 사용하여 빌드된 파이썬 바이너리 릴리스에는 영향을 주지 않습니다.

    (Sergey B Kirpichev가 gh-115119 에서 기여함.)

  • 동일한 트리 내에 여러 버전의 파이썬을 함께 설치하는 리눅스 배포판에서 build-details.json 충돌을 방지할 수 있도록 --with-build-details-suffix 구성 플래그를 추가합니다.

    (Stefano Rivera가 gh-131372 에서 기여함.)

C API 변경

새 기능

  • TODO

Python 3.16으로의 이식

  • TODO

폐지된 C API

파이썬 3.18에서 제거 예정

Python 3.19에서 삭제 예정

  • PEP 456 문자열 해싱 방식 정의에 대한 임베더(embedder) 지원.

Python 3.20에서 삭제 예정

향후 버전에서 제거 예정

다음 API들은 현재 구체적인 제거 날짜가 정해지지는 않았으나 향후 삭제될 예정입니다.

제거된 C API

분실물 보관소