منسوخ‌شده‌ها

در انتظار حذف در پایتون 3.16

  • سیستم ایمپورت:

    • تنظیم __loader__ روی یک ماژول بدون تنظیم __spec__.loader منسوخ شده است. در پایتون 3.16، __loader__ دیگر توسط سیستم ایمپورت یا کتابخانه استاندارد تنظیم یا در نظر گرفته نخواهد شد.

  • array:

    • کد قالب 'u' (wchar_t) در مستندات از پایتون 3.3 و در ران‌تایم از پایتون 3.13 منسوخ شده است. به جای آن، برای نویسه‌های یونیکد از کد قالب 'w' (Py_UCS4) استفاده کنید.

  • asyncio:

  • builtins:

    • وارون‌سازی بیتی روی نوع‌های بولی، یعنی ~True یا ~False، از پایتون 3.12 منسوخ شده است، زیرا نتایج غیرمنتظره و غیرشهودی تولید می‌کند (-2 و -1). برای نقیض منطقی یک مقدار بولی، به‌جای آن از not x استفاده کنید. در موارد نادر که به وارون‌سازی بیتی عدد صحیح زیرین نیاز دارید، آن را به‌طور صریح به int تبدیل کنید (~int(x)).

  • functools:

    • فراخوانی پیاده‌سازی پایتونی functools.reduce() با آرگومان‌های کلیدواژه‌ای function یا sequence از پایتون 3.14 منسوخ شده است.

  • logging:

    • پشتیبانی از هندلرهای سفارشی گزارش‌گیری با آرگومان strm منسوخ شده و برای حذف در پایتون 3.16 برنامه‌ریزی شده است. به جای آن، هندلرها را با آرگومان stream تعریف کنید. (مشارکت Mariusz Felisiak در gh-115032.)

  • mimetypes:

    • پسوندهای معتبر برای mimetypes.MimeTypes.add_type() با '.' شروع می‌شوند یا خالی هستند. پسوندهای بدون نقطه منسوخ شده‌اند و در پایتون 3.16 استثنای ValueError ایجاد خواهند کرد. (با مشارکت هوگو ون کمناده در gh-75223.)

  • shutil:

    • استثنای ExecError از پایتون 3.14 منسوخ شده است. از پایتون 3.4 به بعد، هیچ تابعی در shutil از آن استفاده نکرده است و اکنون نام مستعاری برای RuntimeError است.

  • symtable:

  • sys:

  • sysconfig:

    • تابع sysconfig.expand_makefile_vars() از پایتون 3.14 منسوخ شده است. به جای آن، از آرگومان vars در sysconfig.get_paths() استفاده کنید.

  • tarfile:

    • ویژگی مستندنشده و استفاده‌نشده‌ی TarFile.tarfile از پایتون 3.13 منسوخ شده است.

در انتظار حذف در پایتون 3.17

  • datetime:

    • فراخوانی‌های strptime() که از یک رشته‌ی قالب حاوی %e (روز ماه) بدون سال استفاده می‌کنند. این مورد از پایتون ۳.۱۵ منسوخ شده است. (مشارکتی از Stan Ulbrych در gh-70647.)

  • collections.abc:

    • collections.abc.ByteString برای حذف در پایتون 3.17 برنامه‌ریزی شده است.

      از isinstance(obj, collections.abc.Buffer) استفاده کنید تا در زمان اجرا بررسی کنید که آیا obj پروتکل بافر را پیاده‌سازی می‌کند. برای استفاده در حاشیه‌نویسی نوع، یا از Buffer استفاده کنید یا از یک اجتماع (union) که به‌طور صریح نوع‌هایی را که کد شما از آن‌ها پشتیبانی می‌کند مشخص می‌کند (مثلاً bytes | bytearray | memoryview).

      ByteString در اصل قرار بود یک کلاس انتزاعی باشد که به‌عنوان ابرنوعی برای هر دو bytes و bytearray عمل کند. با این حال، از آنجا که این کلاس پایه انتزاعی هرگز هیچ متدی نداشت، دانستن اینکه شیء‌ای نمونه‌ای از ByteString است، هرگز در واقع هیچ چیز مفیدی درباره‌ی آن شیء به شما نمی‌گفت. سایر نوع‌های رایج بافر مانند memoryview نیز هرگز به‌عنوان زیرنوع‌هایی از ByteString شناخته نمی‌شدند (نه در ران‌تایم و نه توسط بررسی‌گرهای نوع ایستا).

      برای جزئیات بیشتر به PEP 688 مراجعه کنید. (مشارکت‌شده توسط Shantanu Jain در gh-91896.)

  • encodings:

    • ارسال نام‌های encoding غیر اسکی به encodings.normalize_encoding() منسوخ شده است و طبق برنامه در پایتون ۳.۱۷ حذف خواهد شد. (مشارکتی از Stan Ulbrych در gh-136702.)

  • profile:

    • ماژول profile منسوخ شده است و در پایتون ۳.۱۷ حذف خواهد شد. به‌جای آن از profiling.tracing استفاده کنید که یک API سازگار فراهم می‌کند. برای جزئیات بیشتر PEP 799 را ببینید. (مشارکتی از Pablo Galindo و László Kiss Kollár در gh-138122.)

  • webbrowser:

    • کلاس webbrowser.MacOSXOSAScript به نفع کلاس webbrowser.MacOS منسوخ شده است. (gh-137586)

  • typing:

    • پیش از پایتون 3.14، اجتماع‌های سبک قدیمی (old-style unions) با استفاده از کلاس خصوصی typing._UnionGenericAlias پیاده‌سازی می‌شدند. این کلاس دیگر برای پیاده‌سازی لازم نیست، اما برای سازگاری با نسخه‌های پیشین حفظ شده است و حذف آن برای پایتون 3.17 برنامه‌ریزی شده است. کاربران باید به‌جای اتکا به جزئیات پیاده‌سازی خصوصی، از ابزارهای کمکی درون‌نگری مستند مانند typing.get_origin() و typing.get_args() استفاده کنند.

    • typing.ByteString که از پایتون 3.9 منسوخ شده است، برای حذف در پایتون 3.17 برنامه‌ریزی شده است.

      از isinstance(obj, collections.abc.Buffer) استفاده کنید تا در زمان اجرا بررسی کنید که آیا obj پروتکل بافر را پیاده‌سازی می‌کند. برای استفاده در حاشیه‌نویسی نوع، یا از Buffer استفاده کنید یا از یک اجتماع (union) که به‌طور صریح نوع‌هایی را که کد شما از آن‌ها پشتیبانی می‌کند مشخص می‌کند (مثلاً bytes | bytearray | memoryview).

      ByteString در اصل قرار بود یک کلاس انتزاعی باشد که به‌عنوان ابرنوعی برای هر دو bytes و bytearray عمل کند. با این حال، از آنجا که این کلاس پایه انتزاعی هرگز هیچ متدی نداشت، دانستن اینکه شیء‌ای نمونه‌ای از ByteString است، هرگز در واقع هیچ چیز مفیدی درباره‌ی آن شیء به شما نمی‌گفت. سایر نوع‌های رایج بافر مانند memoryview نیز هرگز به‌عنوان زیرنوع‌هایی از ByteString شناخته نمی‌شدند (نه در ران‌تایم و نه توسط بررسی‌گرهای نوع ایستا).

      برای جزئیات بیشتر به PEP 688 مراجعه کنید. (مشارکت‌شده توسط Shantanu Jain در gh-91896.)

  • tkinter:

    • متدهای tkinter.Variable یعنی trace_variable()، trace() (یک نام مستعار برای trace_variable())، trace_vdelete() و trace_vinfo() که از پایتون ۳.۱۴ منسوخ شده‌اند، طبق برنامه در پایتون ۳.۱۷ حذف خواهند شد. به‌جای آن‌ها از trace_add()، trace_remove() و trace_info() استفاده کنید. (مشارکتی از Serhiy Storchaka در gh-120220.)

در انتظار حذف در پایتون 3.18

  • هنگامی که انتظار یک توصیف‌گر پرونده می‌رود، دیگر یک مقدار بولی پذیرفته نمی‌شود. (مشارکتی از Serhiy Storchaka در gh-82626.)

  • decimal:

    • مشخص‌کننده قالب 'N' در Decimal که غیراستاندارد و مستندسازی‌نشده است و فقط در پیاده‌سازی C ماژول decimal پشتیبانی می‌شود، از پایتون 3.13 منسوخ شده است. (مشارکت‌شده توسط Serhiy Storchaka در gh-89902.)

  • موارد منسوخ تعریف‌شده توسط PEP 829:

    • خط‌های import در پرونده‌های name.pth به‌طور صامت نادیده گرفته می‌شوند.

    (تهیه‌شده توسط Barry Warsaw در gh-148641.)

در انتظار حذف در پایتون 3.19

  • ctypes:

    • تغییر ضمنی به چیدمان ساختار سازگار با MSVC با تنظیم _pack_ اما بدون تنظیم _layout_ روی پلتفرم‌های غیر ویندوزی.

  • hashlib:

    • در سازنده‌های توابع هش مانند new() یا سازنده‌های مستقیم با نام هش مانند md5() و sha256()، در پیاده‌سازی‌های مختلف hashlib می‌توانید پارامتر داده‌ی اولیه اختیاری را به صورت آرگومان کلیدواژه‌ای با نام data= یا string= نیز ارسال کنید.

      پشتیبانی از نام آرگومان کلیدواژه‌ای string اکنون منسوخ شده است و در پایتون ۳.۱۹ حذف خواهد شد.

      پیش از نسخه‌ی ۳.۱۳ پایتون، پارامتر کلیدواژه‌ای string بسته به پیاده‌سازی بک‌اند توابع هش به‌درستی پشتیبانی نمی‌شد. برای حداکثر سازگاری با نسخه‌های قبلی، ترجیح دهید داده‌ی اولیه را به عنوان یک آرگومان جایگاهی ارسال کنید.

  • http.cookies:

  • imaplib:

    • تغییر دادن IMAP4.file اکنون منسوخ شده است و برای حذف در نسخه‌ی ۳.۱۹ پایتون در نظر گرفته شده است. این ویژگی اکنون استفاده نمی‌شود و تغییر دادن مقدار آن پرونده‌ی جاری را به‌طور خودکار نمی‌بندد.

      پیش از نسخه‌ی ۳.۱۴ پایتون، از این ویژگی برای پیاده‌سازی متدهای متناظر read() و readline() برای IMAP4 استفاده می‌شد اما از آن زمان به بعد دیگر این‌طور نیست.

در نسخه‌ی ۳.۲۰ پایتون حذف خواهد شد

  • فراخوانی متد __new__() از struct.Struct بدون آرگومان format منسوخ شده است و در نسخه‌ی ۳.۲۰ پایتون حذف خواهد شد. فراخوانی متد __init__() روی اشیاء مقداردهی‌شده‌ی Struct منسوخ شده است و در نسخه‌ی ۳.۲۰ پایتون حذف خواهد شد.

    (مشارکت‌کرده توسط Sergey B Kirpichev و Serhiy Storchaka در gh-143715.)

  • ویژگی‌های __version__، version و VERSION در این ماژول‌های کتابخانه‌ی استاندارد منسوخ شده‌اند و در نسخه‌ی ۳.۲۰ پایتون حذف خواهند شد. به‌جای آن‌ها از sys.version_info استفاده کنید.

    (تهیه‌شده توسط Hugo van Kemenade و Stan Ulbrych در gh-76007.)

  • موارد منسوخ تعریف‌شده توسط PEP 829:

    • برای خط‌های import یافت‌شده در پرونده‌های name.pth اخطاردهی می‌شود.

    • پرونده‌های name.pth دیگر به‌طور پیش‌فرض با کدگذاری locale رمزگشایی نمی‌شوند. آن‌ها باید با کدگذاری utf-8-sig رمزگذاری شوند.

    (تهیه‌شده توسط Barry Warsaw در gh-148641.)

  • ast:

    • ایجاد نمونه‌هایی از گره‌های درخت نحوی انتزاعی (AST) (مانند ast.AST یا ast.expr) منسوخ شده است و در نسخه‌ی ۳.۲۰ پایتون خطایی را ایجاد خواهد کرد.

  • typing:

    • فراخوانی بررسی‌های isinstance() و issubclass() روی کلاس‌های پروتکلی که صراحتاً با runtime_checkable() تزئین نشده‌اند اما از یک کلاس پروتکل با قابلیت بررسی در زمان اجرا (runtime-checkable) ارث‌بری می‌کنند، منسوخ شده است. این کار در نسخه‌ی ۳.۲۰ پایتون یک خطای TypeError ایجاد خواهد کرد.

      (تهیه‌شده توسط Bartosz Sławecki در gh-132604.)

در انتظار حذف در نسخه‌های آینده

APIهای زیر در آینده حذف خواهند شد، اگرچه در حال حاضر تاریخی برای حذف آن‌ها برنامه‌ریزی نشده است.

  • argparse:

    • تودرتو کردن گروه‌های آرگومان و تودرتو کردن گروه‌های انحصاری متقابل منسوخ شده‌اند.

    • گذراندن آرگومان کلیدواژه‌ای مستندنشده‌ی prefix_chars به add_argument_group() اکنون منسوخ شده است.

    • مبدل نوع 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، is و or دنبال شود، یک هشدار سینتکس اکسپورت می‌شود. در یک نسخه‌ی آینده این مورد به یک خطای سینتکس تبدیل خواهد شد. (gh-87999)

    • پشتیبانی از بازگرداندن نوعی غیر از int توسط متد‌های __index__() و __int__(): این متدها ملزم خواهند شد که نمونه‌ای از یک زیرکلاس محضِ int را بازگردانند.

    • پشتیبانی از متد __float__() که زیرکلاس اکیدی از float را برمی‌گرداند: این متدها ملزم خواهند شد که نمونه‌ای از float را بازگردانند.

    • پشتیبانی از متد __complex__() که زیرکلاس اکیدِ complex را برمی‌گرداند: این متدها ملزم خواهند شد که نمونه‌ای از complex را برگردانند.

    • گذراندن یک عدد مختلط به‌عنوان آرگومان real یا imag در سازنده‌ی complex() اکنون منسوخ شده است؛ این عدد باید فقط به‌صورت یک آرگومان جایگاهی واحد ارسال شود. (مشارکت Serhiy Storchaka در gh-109218.)

  • calendar: ثابت‌های calendar.January و calendar.February منسوخ شده‌اند و با calendar.JANUARY و calendar.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) استفاده کنید.

  • gettext: مقدار جمع باید یک عدد صحیح باشد.

  • importlib:

    • پارامتر debug_override در cache_from_source() منسوخ شده است: به جای آن از پارامتر optimization استفاده کنید.

  • importlib.metadata:

    • رابط تاپلیِ EntryPoints.

    • None ضمنی در مقادیر بازگشتی.

  • logging: متد warn() از پایتون 3.3 به بعد منسوخ شده است؛ به جای آن از warning() استفاده کنید.

  • mailbox: استفاده از ورودی StringIO و حالت متنی منسوخ شده است؛ به‌جای آن از BytesIO و حالت دودویی استفاده کنید.

  • os: فراخوانی os.register_at_fork() در یک فرایند چندنخی.

  • os.path: تابع os.path.commonprefix() منسوخ شده است؛ برای پیشوندهای مسیر از os.path.commonpath() استفاده کنید. تابع os.path.commonprefix() به دلیل داشتن نام و ماژول گمراه‌کننده در حال منسوخ شدن است. این تابع با وجود اینکه در ماژولی مربوط به دستکاری مسیر قرار دارد، برای استفاده با پیشوندهای مسیر ایمن نیست؛ یعنی با استفاده از این تابع می‌توان به‌طور تصادفی آسیب‌پذیری‌های پیمایش مسیر را وارد برنامه‌های پایتون کرد.

  • pydoc.ErrorDuringImport: مقدار تاپل برای پارامتر exc_info منسوخ شده است؛ از یک نمونه استثنا استفاده کنید.

  • re: اکنون قواعد سخت‌گیرانه‌تری برای ارجاع‌های عددی گروه و نام گروه‌ها در عبارت‌های باقاعده اعمال می‌شود. اکنون فقط دنباله‌ای از ارقام اسکی به‌عنوان ارجاع عددی پذیرفته می‌شود. نام گروه در الگوهای بایتی و رشته‌های جایگزین اکنون فقط می‌تواند شامل حروف و ارقام اسکی و زیرخط باشد. (مشارکت‌شده توسط Serhiy Storchaka در gh-91760.)

  • shutil: پارامتر onerror در rmtree() در پایتون 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 استفاده نمی‌شود. برای حفظ سازگاری با کاربرانی که از این کلاس خصوصی استفاده می‌کنند، یک لایه‌ی سازگاری (shim) تا دست‌کم Python 3.17 ارائه خواهد شد. (مشارکت‌شده توسط 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: آزمودن مقدار درستی یک Element منسوخ شده است. در نسخه‌ای در آینده، همیشه True بازگردانده خواهد شد. به جای آن، آزمون‌های صریح len(elem) یا elem is not None را ترجیح دهید.

  • sys._clear_type_cache() منسوخ شده است: به جای آن از sys._clear_internal_caches() استفاده کنید.

منسوخ‌سازی‌های نرم

هیچ برنامه‌ای برای حذف مشتراک‌ناپذیر APIها وجود ندارد.

  • re.match() و re.Pattern.match() اکنون به نفع APIهای جدید re.prefixmatch() و re.Pattern.prefixmatch() که به عنوان نام‌های جایگزین و صریح‌تر اضافه شده‌اند، مشتراک‌ناپذیر می‌شوند. این تغییرات به این منظور در نظر گرفته شده‌اند تا با پیروی از شعار ذن پایتون یعنی «صریح بودن بهتر از ضمنی بودن است»، سردرگمی‌ها پیرامون معنای match را کاهش دهند. بیشتر کتابخانه‌های عبارت باقاعده در زبان‌های دیگر از APIای به نام match استفاده می‌کنند که منظور پایتون از آن چیزی است که همیشه search نامیده است.

    ما هیچ برنامه‌ای برای حذف نام قدیمی‌تر match() نداریم، زیرا این نام بیش از ۳۰ سال است که در کدها استفاده می‌شود. کدهایی که از نسخه‌های قدیمی‌تر پایتون پشتیبانی می‌کنند باید همچنان از match() استفاده کنند، در حالی که کدهای جدید باید prefixmatch() را ترجیح دهند. توابع prefixmatch() در برابر match() را ببینید.

    (مشارکت‌کرده توسط Gregory P. Smith در gh-86519 و Hugo van Kemenade در gh-148100.)

  • استفاده از کدهای نوع فرمت 'F' و 'D' در ماژول struct اکنون به نفع فرم‌های دوحرفی 'Zf' و 'Zd' مشتراک‌ناپذیر شده‌اند. (مشارکت‌کرده توسط Sergey B Kirpichev در gh-121249.)

منسوخ‌شده‌های C API

در انتظار حذف در پایتون 3.15

در انتظار حذف در پایتون 3.16

  • نسخه‌ی بسته‌بندی‌شده‌ی libmpdec.

در انتظار حذف در پایتون 3.18

در انتظار حذف در پایتون 3.19

  • پشتیبانی تعبیه‌کنندگان PEP 456 از تعریف طرح‌واره‌ی هش کردن رشته.

در نسخه‌ی ۳.۲۰ پایتون حذف خواهد شد

در انتظار حذف در نسخه‌های آینده

API‌های زیر منسوخ شده‌اند و حذف خواهند شد، اگرچه در حال حاضر هیچ تاریخی برای حذف آن‌ها تعیین نشده است.