폐지 사항¶
파이썬 3.17에서 삭제 예정¶
-
연도 정보 없이
%e(월의 일수)를 포함하는 포맷 문자열을 사용하는strptime()호출이 파이썬 3.15부터 사용 중단되었습니다. (Stan Ulbrych가 gh-70647 에서 기여)
:mod:`collections.abc`:
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에서 삭제 예정¶
ctypes`:-
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는 향후 제거될 예정이나, 현재로서는 구체적인 제거 날짜가 정해지지 않았습니다.
:mod:`argparse`
인수 그룹 중첩 및 상호 배타적인 그룹을 중첩하는 기능은 더 이상 권장되지 않습니다(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: 복수형 값은 정수여야 합니다.`
:mod:`importlib`
cache_from_source()의 debug_override 매개 변수가 폐지되었습니다. 대신 optimization 매개 변수를 사용하십시오.
:mod:`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_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()를 사용하십시오.
약한 폐지(Soft deprecations)¶
soft deprecated API를 제거할 계획은 없습니다.
re.match()및re.Pattern.match`는 더 명확한 이름을 가진 새로운 :func:`re.prefixmatch()및re.Pattern.prefixmatch()API를 지원하기 위해 현재 soft deprecated 상태입니다. 이는 파이썬의 철학인 “명시적인 것이 암묵적인 것보다 낫다”라는 원칙에 따라 *match*가 의미하는 바에 대한 혼동을 줄이기 위해 도입되었습니다. 대부분의 다른 언어 정규표현식 라이브러리들은 파이썬이 항상 *search*라고 불러온 것을 의미하기 위해 *match*라는 이름의 API를 사용합니다.오래된
match()이름을 삭제할 계획은 없습니다. 이 이름은 30년 이상 코드에서 사용되어 왔기 때문입니다. 이전 버전의 Python을 지원하는 코드는 계속해서match()를 사용해야 하며, 새 코드는prefixmatch()를 사용하는 것이 좋습니다. 자세한 내용은 prefixmatch() 대 match() 를 참조하십시오.(Gregory P. Smith가 gh-86519 에서, Hugo van Kemenade가 gh-148100 에서 기여함.)
struct모듈의'F'및'D'포맷 타입 코드를 사용하는 것은 이제 두 글자 형태인'Zf'및 ``’Zd’``를 대신하여 약하게 폐지 되었습니다. (Sergey B Kirpichev가 :gh:`121249`에서 기여함.)
C API 폐지 사항¶
파이썬 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부터 필요하지 않습니다.