Python

폐지 사항

파이썬 3.17에서 삭제 예정

  • datetime:

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

  • :mod:`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는 향후 제거될 예정이나, 현재로서는 구체적인 제거 날짜가 정해지지 않았습니다.

  • :mod:`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: 복수형 값은 정수여야 합니다.`

  • :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_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() 를 사용하십시오.

약한 폐지(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에서 제거 예정

Python 3.19에서 삭제 예정

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

Python 3.20에서 삭제 예정

향후 버전에서 제거 예정

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