Python 3.16의 새로운 기능¶
- 편집자:
TBD
이 문서는 3.15와 비교하여 Python 3.16에 추가된 새로운 기능들을 설명합니다.
자세한 내용은 변경 로그 를 참조하십시오.
참고
사전 출시 사용자는 이 문서가 현재 초안 상태임을 유의해야 합니다. Python 3.16이 정식 출시로 향함에 따라 내용이 대폭 업데이트될 예정이므로, 이전 버전을 읽은 후에도 다시 확인해 볼 가치가 있습니다.
요약 — 출시 주요 사항¶
새 기능¶
기타 언어 변경 사항들¶
새 모듈¶
아직 없음.
개선된 모듈¶
curses¶
curses모듈에 여러 터미널을 지원하는 기능을 추가합니다: 새로운 함수인curses.newterm(),curses.set_term(),curses.new_prescr(), 그에 해당하는 screen 객체, 그리고window.use()메서드가 추가되었습니다. (Serhiy Storchaka가 gh-90092 에서 기여함.)이제
curses문자 셀 창 메서드는 단일 정수 또는 바이트 문자에 더해, 전체 문자 셀(공백 문자가 선택적으로 뒤에 결합 문자를 따르는 형태)을 수용합니다. 이는addch(),bkgd(),bkgdset(),border(),box(),echochar(),hline(),insch()및vline()에 영향을 줍니다. 또한getstr()및instr()의 대응 메서드이며bytes대신str을 반환하는 와이드 문자 읽기 메서드인get_wstr()와in_wstr(), 그리고curses.erasechar(),curses.killchar(),curses.unctrl()의 와이드 문자 대응 기능인 모듈 함수curses.erasewchar(),curses.killwchar()및curses.wunctrl()이 추가되었습니다. 좁은(non-ncursesw) 빌드에서 문자 셀은 결합 표식 없이 단일 문자를 보유하며, 이는 창의 인코딩에서 한 바이트로 표현 가능하고,in_wstr()은 해당 내용을 디코딩된 텍스트로 반환합니다. (Serhiy Storchaka가 gh-151757 에서 기여).와이드 문자(wide-character)용
curses함수 및 메서드인get_wch(),get_wstr(),curses.unget_wch(),curses.erasewchar(),curses.killwchar()및curses.wunctrl()은 이제 파이썬이 와이드 문자 인식 curses 라이브러리를 기반으로 빌드되지 않은 8비트 로캘(각 문자가 해당 인코딩에서 단일 바이트인 경우)에서도 작동합니다.curses.ungetch()는 이제curses.unget_wch()와 마찬가지로 한 문자짜리 문자열도 수용하며, 와이드 문자 빌드에서는 어떤 문자든 가능합니다(이전에는 멀티바이트 문자가 입력될 경우OverflowError가 발생했습니다). (Serhiy Storchaka가 gh-152470 에서 기여).curses.filter()의 효과를 취소하는curses.nofilter()를 추가했습니다. (Serhiy Storchaka가 gh-151744 에서 기여함.)동적 컬러 페어 관리를 위한
curses함수인curses.alloc_pair(),curses.find_pair(),curses.free_pair()및curses.reset_color_pairs()를 추가했습니다. 이 기능은 확장 컬러(extended-color) 지원이 포함된 와이드 캐릭터 ncurses와 함께 빌드될 때 사용할 수 있습니다. (Serhiy Storchaka가 gh-151774 에서 기여함.)NCURSES_EXT_FUNCS가 포함된 ncurses와 함께 빌드될 때 사용 가능한, 기존에 설정만 가능했던 상태를 보고하는curses함수 및 window 메서드를 추가합니다. 여기에는curses.window.is_keypad(),curses.window.getparent(),curses.is_cbreak()등이 포함됩니다. (Serhiy Storchaka가 gh-151776 에서 기여함.)속성 값에 포함하는 대신 색상 쌍을 별도의 인자로 전달하는
curses창 메서드인attr_get(),attr_set(),attr_on(),attr_off(),color_set()와 그에 해당하는WA_*속성 상수를 추가합니다. (Serhiy Storchaka가 gh-152219 를 통해 기여했습니다.)스타일이 적용된 문자 셀(텍스트, 속성 및 색상 쌍)을 나타내는
curses.complexchar타입과 둘 중 하나를 반환하는 창 메서드in_wch()및getbkgrnd()(각각inch()및getbkgd()의 대응 함수)이 추가되었습니다.addch()및border()와 같은 문자 셀 메서드는 이제complexchar도 수용합니다. 이들은 파이썬이 와이드 문자를 인식하는 curses 라이브러리를 기반으로 빌드되었는지 여부와 상관없이 작동하며, 좁은 빌드에서는 한 셀이 창의 인코딩에서 1바이트로 표현 가능한 단일 문자를 보유합니다(따라서 8비트 로캘만 지원됨). (Serhiy Storchaka가 gh-152233 에서 기여함.)스타일이 적용된 셀의 불변 시퀀스(
complexchar에 대응하는 문자열 버전)인curses.complexstr타입과 이를 반환하는 창 메서드in_wchstr()가 추가되었습니다.addstr(),addnstr(),insstr()및insnstr()과 같은 문자열-셀 메서드는 이제complexstr도 수용합니다.complexchar와 마찬가지로, 이 타입은 파이썬이 와이드 문자를 인식하는 curses 라이브러리를 기반으로 빌드되었는지 여부와 상관없이 작동합니다. (Serhiy Storchaka가 gh-152233 에서 기여함.)기존 창의 독립적인 복제본인 새 창을 반환하는
curses창 메서드dupwin()을 추가합니다. (Serhiy Storchaka가 gh-152258 에서 기여함.)전체 화면을 파일에 덤프하고 복구하는 기능을 제공하는
curses함수인scr_dump(),scr_restore(),scr_init(), 그리고scr_set()를 추가합니다. (Serhiy Storchaka가 gh-152260 에서 기여함.)화면 하단 라인을 따라 배치되는 레이블 행을 관리하는
curses모듈에 soft-label-key 함수를 추가합니다:slk_init(),slk_set(),slk_label(),slk_refresh(),slk_noutrefresh(),slk_clear(),slk_restore(),slk_touch(), 속성 함수인slk_attron(),slk_attroff(),slk_attrset(),slk_attr(),slk_attr_on(),slk_attr_off(),slk_attr_set(), 그리고slk_color(). (Serhiy Storchaka가 gh-152263 을 통해 기여함.)curses.termattrs()의 대응 기능으로, 지원되는 비디오 속성을 WA_* 값으로 반환하는curses.term_attrs()함수를 추가했습니다. (Serhiy Storchaka가 gh-152332 에서 기여함.)ncurses가
NCURSES_EXT_FUNCS와 함께 빌드되었을 때 사용할 수 있는curses키 관리 기능인define_key(),key_defined(),keyok()를 추가합니다. (Serhiy Storchaka가 gh-152334 에서 제공함.)curses.has_mouse()함수와curses.window.mouse_trafo()메서드를 추가하여curses마우스 인터페이스를 완성합니다. (Serhiy Storchaka가 gh-152325 에서 기여함.)curses.textpad.Textbox은 이제 curses가 와이드 문자 지원과 함께 빌드된 경우 조합 문자를 포함한 전체 유니코드 범위를 입력하고 다시 읽어올 수 있습니다. (Serhiy Storchaka가 gh-133031 에서 기여함.)
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_ARM64및lzma.FILTER_RISCV를 통해 새로운 BCJ 필터인 ARM64와 RISC-V 지원을 추가했습니다. 새로운 필터는 런타임 라이브러리가 지원하는 경우에만 작동합니다. ARM64 필터는lzma5.4.0 이상이 필요하며, RISC-V는 5.6.0 이상이 필요합니다. (Chien Wong이 gh-115988 에서 기여함.)
math¶
라디안 대신 반 바퀴(half turn) 단위를 사용하는 삼각함수들을 추가했습니다. 새로운 함수인
math.acospi(),math.asinpi(),math.atanpi(), 및math.atan2pi()는 반 바퀴 각도를 반환합니다. 새 함수들인math.cospi(),math.sinpi(), 및math.tanpi()는 반 바퀴 각도 인자를 받습니다. 이 함수들은 IEEE 754-2019에서 권장되며 C23에서 표준화되었습니다. (Jeff Epler가 gh-150534 에서 기여함.)
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.Entry및tkinter.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.SimpleDialog와askinteger(),askfloat(),askstring()대화 상자는 이제 기존의tkinter위젯 대신 테마가 적용된tkinter.ttk위젯으로 구성됩니다. 호환성을 위해tkinter.simpledialog.Dialog기본 클래스는 여전히 기본 위젯을 사용합니다.Dialog와SimpleDialog모두는 기존 Tk 위젯과 테마가 적용된 ttk 위젯 중 하나를 선택하는 use_ttk 매개변수를 갖게 되었습니다. 또한SimpleDialog은 bitmap 및 detail 매개변수를 추가로 얻었으며, 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¶
module_name¶
TODO
제거됨¶
annotationlib¶
파이썬 3.14부터 사용이 중단(deprecated)된
annotationlib.ForwardRef._evaluate()메서드입니다. 대신annotationlib.ForwardRef.evaluate()또는typing.evaluate_forward_ref()를 사용하십시오.
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¶
mimetypes.MimeTypes.add_type()에서 유효한 확장자는 ‘.’으로 시작하거나 비어 있어야 합니다. 점이 없는 확장자는 이제ValueError를 발생시킵니다.
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부터 사용 지원 중단되었습니다.
사용 지원 중단됨¶
새로운 폐지 사항¶
-
파이썬 3.3부터 소프트 폐지(soft-deprecated)된
abc.abstractclassmethod,abc.abstractstaticmethod, 및abc.abstractproperty가 이제DeprecationWarning을 발생시킵니다. 이 클래스들은 파이썬 3.21에서 제거될 예정이며, 대신 각각classmethod(),staticmethod(), 그리고property와 함께 사용되는abc.abstractmethod()를 사용하십시오.
ast:파이썬 3.9부터 폐지된
slice,Index,ExtSlice,Suite,Param,AugLoad및AugStore클래스는 더 이상from ast import *에 의해 가져오기(import)되지 않으며 사용 시 경고를 발생시킵니다. 이 클래스들은 파이썬 3.21에서 제거될 예정입니다. 이 타입들은 파서에 의해 생성되지 않으며 코드 생성기에 의해 수용되지 않습니다.파이썬 3.9부터 폐지된
ast.Tuple객체의dims속성이 이제 사용 시 경고를 발생시킵니다. 이 속성은 3.21에서 제거될 예정입니다. 대신ast.Tuple.elts를 사용하십시오.
파이썬 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의 하위 유형으로 인식되지 않았습니다.
파이썬 3.18에서 제거 예정¶
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)를 사용하십시오.
:mod:`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()를 사용하십시오.
Python 3.16으로의 이식¶
이 섹션은 이전에 설명된 변경 사항과 코드를 수정해야 할 수도 있는 기타 버그 수정을 나열합니다.
빌드 변경¶
유지관리 및 업데이트를 간소화하기 위해 CPython 소스 트리에서 포함된 libmpdec decimal 라이브러리 사본을 제거합니다. 이제
decimal모듈은 무조건 시스템의 libmpdec decimal 라이브러리를 사용합니다. 또한 더 이상 사용되지 않는--with-system-libmpdecconfigure 플래그도 제거합니다. 이 변경 사항은 지난 몇 차례 동안 별도의 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¶
PyGen_New(),PyGen_NewWithQualName(),PyCoro_New(), 및PyAsyncGen_New()가 폐지되었습니다. 이 기능들은 3.18에서 제거될 예정입니다.
파이썬 3.18에서 제거 예정¶
다음과 같은 private 함수들은 deprecated되었으며 Python 3.18에서 제거될 예정입니다:
_PyBytes_Join():PyBytes_Join()을(를) 사용하십시오._PyDict_GetItemStringWithError():PyDict_GetItemStringRef()를(를) 사용하십시오._PyDict_Pop():PyDict_Pop()을(를) 사용하십시오._PyLong_Sign():PyLong_GetSign()을(를) 사용하십시오._PyLong_FromDigits()및_PyLong_New():PyLongWriter_Create()를(를) 사용하십시오._PyThreadState_UncheckedGet():PyThreadState_GetUnchecked()를(를) 사용하십시오._PyUnicode_AsString():PyUnicode_AsUTF8()을(를) 사용하십시오._PyUnicodeWriter_Init():_PyUnicodeWriter_Init(&writer)대신writer = PyUnicodeWriter_Create(0)를(를) 사용하십시오._PyUnicodeWriter_Finish():_PyUnicodeWriter_Finish(&writer)대신PyUnicodeWriter_Finish(writer)를(를) 사용하십시오._PyUnicodeWriter_Dealloc():_PyUnicodeWriter_Dealloc(&writer)대신PyUnicodeWriter_Discard(writer)를(를) 사용하십시오._PyUnicodeWriter_WriteChar():_PyUnicodeWriter_WriteChar(&writer, ch)대신PyUnicodeWriter_WriteChar(writer, ch)를(를) 사용하십시오._PyUnicodeWriter_WriteStr():_PyUnicodeWriter_WriteStr(&writer, str)대신PyUnicodeWriter_WriteStr(writer, str)를(를) 사용하십시오._PyUnicodeWriter_WriteSubstring():_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)대신PyUnicodeWriter_WriteSubstring(writer, str, start, end)를(를) 사용하십시오._PyUnicodeWriter_WriteASCIIString():_PyUnicodeWriter_WriteASCIIString(&writer, str)대신PyUnicodeWriter_WriteASCII(writer, str)를(를) 사용하십시오._PyUnicodeWriter_WriteLatin1String():_PyUnicodeWriter_WriteLatin1String(&writer, str)대신PyUnicodeWriter_WriteUTF8(writer, str)를(를) 사용하십시오._PyUnicodeWriter_Prepare(): (대체 사항 없음)._PyUnicodeWriter_PrepareKind(): (대체 사항 없음)._Py_HashPointer():Py_HashPointer()를(를) 사용하십시오._Py_fopen_obj():Py_fopen()을(를) 사용하십시오.PyGen_New(): (대체 사항 없음).PyGen_NewWithQualName(): (대체 사항 없음).PyCoro_New(): (대체 사항 없음).PyAsyncGen_New(): (대체 사항 없음).
Python 3.13 및 이전 버전에서 이러한 새로운 공개 함수를 얻으려면 pythoncapi-compat 프로젝트 <https://github.com/python/pythoncapi-compat/> 를(를) 사용할 수 있습니다. (Victor Stinner가 gh-128863 에서 기여).
Python 3.19에서 삭제 예정¶
PEP 456 문자열 해싱 방식 정의에 대한 임베더(embedder) 지원.
Python 3.20에서 삭제 예정¶
_PyObject_CallMethodId(),_PyObject_GetAttrId(), 그리고_PyUnicode_FromId()는 3.15부터 폐지되었으며 3.20에서 제거될 예정입니다. 대신PyUnicode_InternFromString()을 사용하고 결과를 모듈 상태에 캐싱한 후,PyObject_CallMethod()또는PyObject_GetAttr()를 호출하십시오. (Victor Stinner가 gh-141049 에서 기여하였습니다.)PyComplexObject의cval필드(gh-128813). 파이썬 복소수를 CPy_complex표현으로 변환하거나 그 반대의 경우를 수행하려면PyComplex_AsCComplex()와PyComplex_FromCComplex()를 사용하십시오.Py_MATH_PIl및Py_MATH_El매크로.
향후 버전에서 제거 예정¶
다음 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부터 필요하지 않습니다.