تازههای پایتون 3.12¶
- ویرایشگر:
Adam Turner
این مقاله قابلیتهای جدید پایتون 3.12 را در مقایسه با 3.11 توضیح میدهد. پایتون 3.12 در تاریخ ۲ اکتبر ۲۰۲۳ منتشر شد. برای جزئیات کامل، به فهرست تغییرات مراجعه کنید.
همچنین ملاحظه نمائید
PEP 693 -- زمانبندی انتشار Python 3.12
خلاصه -- نکات برجسته انتشار¶
پایتون 3.12 یک نسخه پایدار از زبان برنامهنویسی پایتون است که ترکیبی از تغییرات در زبان و کتابخانه استاندارد را در بر میگیرد. تغییرات کتابخانه بر پاکسازی APIهای منسوخ، کاربردپذیری و درستی متمرکز هستند. شایان ذکر است که بسته distutils از کتابخانه استاندارد حذف شده است. پشتیبانی از سامانه فایلبندی در os و pathlib بهبودهای متعددی داشته است و چندین ماژول نیز کارایی بهتری دارند.
تغییرات زبان بر کاربردپذیری تمرکز دارند، زیرا بسیاری از محدودیتهای افاسترینگها برداشته شدهاند و پیشنهادهای «آیا منظورتان ... بود؟» همچنان بهبود مییابند. سینتکس جدید پارامتر نوع و دستور type، ارگونومی استفاده از نوعهای عام و مستعارهای نوع به همراه بررسیگرهای نوع ایستا را بهبود میبخشند.
این مقاله تلاش نمیکند مشخصات کامل همهی ویژگیهای جدید را ارائه دهد، بلکه در عوض مروری مناسب ارائه میکند. برای جزئیات کامل، باید به مستنداتی مانند مرجع کتابخانه و مرجع زبان مراجعه کنید. اگر میخواهید پیادهسازی کامل و منطق طراحی یک تغییر را درک کنید، به PEP (پیشنهاد بهبود پایتون) مربوط به ویژگی جدید مورد نظر مراجعه کنید؛ اما توجه داشته باشید که PEPها معمولاً پس از پیادهسازی کامل یک ویژگی، بهروز نگه داشته نمیشوند.
ویژگیهای جدید سینتکس:
قابلیتهای جدید دستور زبان:
PEP 701، افاسترینگها در دستور زبان
بهبودهای مفسر:
PEP 684، یک قفل مفسر سراسری منحصربهفرد برای هر مفسر
PEP 669، پایش کمتأثیر
پیشنهادهای بهبودیافته 'Did you mean ...' برای استثناهای
NameError،ImportErrorوSyntaxError
بهبودهای مدل داده پایتون:
PEP 688، استفاده از پروتکل بافر در پایتون
بهبودهای قابلتوجه در کتابخانه استاندارد:
کلاس
pathlib.Pathاکنون از زیرکلاسسازی پشتیبانی میکندماژول
osچندین بهبود برای پشتیبانی از ویندوز دریافت کردیک رابط خط فرمان به ماژول
sqlite3اضافه شده استبررسیهای
isinstance()در برابرپروتکلهای بررسیپذیر در زمان اجرابین دو تا ۲۰ برابر سریعتر شدهاندبستهی
asyncioتعدادی بهبود عملکرد داشته است، بهطوریکه برخی آزمونهای محک (benchmark) افزایش سرعت ۷۵ درصدی را نشان میدهند.یک رابط خط فرمان به ماژول
uuidاضافه شده استبه دلیل تغییرات در PEP 701، تولید توکنها از طریق ماژول
tokenizeتا ۶۴٪ سریعتر شده است.
بهبودهای امنیتی:
پیادهسازیهای توکار
hashlibبرای SHA1، SHA3، SHA2-384، SHA2-512 و MD5 با کد تأییدشده بهصورت صوری از پروژهی HACL* جایگزین شدند. این پیادهسازیهای توکار بهعنوان جایگزین باقی میمانند و تنها زمانی استفاده میشوند که OpenSSL آنها را ارائه نمیکند.
بهبودهای C API:
بهبودهای پیادهسازی سیپایتون:
PEP 709، درونخطیسازی (inlining) درکها
پشتیبانی سیپایتون برای پروفایلگیر
perfلینوکسپیادهسازی حفاظت در برابر سرریز پشته روی پلتفرمهای پشتیبانیشده
ویژگیهای جدید تایپینگ:
PEP 698، دکوراتور
@typing.override
منسوخشدگیها، حذفها یا محدودیتهای مهم:
PEP 623: حذف
wstrاز اشیاء یونیکد در C API پایتون، که اندازهی هر شیءstrرا حداقل ۸ بایت کاهش میدهد.PEP 632: بستهی
distutilsحذف شد. برای راهنمایی دربارهی جایگزینی APIهایی که فراهم میکرد، به راهنمای مهاجرت مراجعه کنید. بستهی شخص ثالث Setuptools همچنانdistutilsرا فراهم میکند، اگر هنوز در پایتون 3.12 و پس از آن به آن نیاز دارید.gh-95299:
setuptoolsدر محیطهای مجازی ایجادشده باvenvپیشنصب نشود. این بدان معناست کهdistutils،setuptools،pkg_resourcesوeasy_installبهطور پیشفرض دیگر در دسترس نخواهند بود؛ برای دسترسی به آنها،pip install setuptoolsرا در محیط مجازی فعالشده اجرا کنید.ماژولهای
asynchat،asyncoreوimpبه همراه چندین مستعار متد ازunittest.TestCaseحذف شدهاند.
قابلیتهای جدید¶
PEP 695: سینتکس پارامتر نوع¶
کلاسها و توابع عام در PEP 484 با استفاده از سینتکس پرگویایی اعلان میشدند که محدودهی پارامترهای نوع را مبهم میگذاشت و اعلانهای صریح وردایی را الزامی میکرد.
PEP 695 روشی جدید، فشردهتر و صریحتر برای ایجاد کلاسهای عام و توابع معرفی میکند:
def max[T](args: Iterable[T]) -> T:
...
class list[T]:
def __getitem__(self, index: int, /) -> T:
...
def append(self, element: T) -> None:
...
علاوه بر این، PEP (پیشنهاد بهبود پایتون) روش جدیدی برای اعلام مستعارهای نوع با استفاده از دستور type معرفی میکند که نمونهای از TypeAliasType ایجاد میکند:
type Point = tuple[float, float]
مستعارهای نوع همچنین میتوانند عام باشند:
type Point[T] = tuple[T, T]
سینتکس جدید امکان تعریف پارامترهای TypeVarTuple و ParamSpec و همچنین پارامترهای TypeVar با کرانها یا محدودیتها را فراهم میکند:
type IntFunc[**P] = Callable[P, int] # ParamSpec
type LabeledTuple[*Ts] = tuple[str, *Ts] # TypeVarTuple
type HashableSequence[T: Hashable] = Sequence[T] # TypeVar with bound
type IntOrStrSequence[T: (int, str)] = Sequence[T] # TypeVar with constraints
مقدار مستعارهای نوع و کران و محدودیتهای متغیرهای نوعی که با این سینتکس ایجاد میشوند، فقط در صورت نیاز ارزیابی میشوند (به ارزیابی تنبل مراجعه کنید). این بدان معناست که مستعارهای نوع میتوانند به نوعهای دیگری که در ادامه پرونده تعریف شدهاند ارجاع دهند.
پارامترهای نوعی که از طریق فهرست پارامتر نوع اعلام میشوند، در محدودهی اعلام و تمام محدودههای تودرتو دیده میشوند، اما در محدودهی بیرونی دیده نمیشوند. برای مثال، میتوان از آنها در حاشیهنویسیهای نوع متدهای یک کلاس عام یا در بدنهی کلاس استفاده کرد. با این حال، پس از تعریف کلاس نمیتوان از آنها در محدودهی ماژول استفاده کرد. برای شرح مفصل معناشناسی رانتایم پارامترهای نوع، به فهرستهای پارامتر نوع مراجعه کنید.
برای پشتیبانی از این معانی محدودهبندی، نوع جدیدی از محدوده معرفی میشود: محدودهی حاشیهنویسی. محدودههای حاشیهنویسی عمدتاً مانند محدودههای تابع رفتار میکنند، اما با محدودههای کلاس دربرگیرنده به شکل متفاوتی تعامل دارند. در پایتون 3.13، حاشیهنویسیها نیز در محدودههای حاشیهنویسی ارزیابی خواهند شد.
برای جزئیات بیشتر به PEP 695 مراجعه کنید.
(PEP توسط Eric Traut نوشته شده است. پیادهسازی توسط Jelle Zijlstra، Eric Traut و دیگران در gh-103764 انجام شده است.)
PEP 701: صوریسازی نحوی افاسترینگها¶
PEP 701 برخی از محدودیتهای استفاده از افاسترینگها را برمیدارد. اجزای عبارت درون افاسترینگها اکنون میتوانند هر عبارت معتبر پایتون باشند، از جمله رشتههایی که از همان علامت نقلقول افاسترینگ دربرگیرندهشان استفاده میکنند، عبارتهای چندسطری، کامنتها، بکاسلشها و دنبالههای خنثیسازی یونیکد. بیایید این موارد را با جزئیات بررسی کنیم:
بازاستفاده از علامت نقلقول: در پایتون 3.11، استفاده مجدد از همان علامتهای نقلقولی که افاسترینگ دربرگیرنده از آنها استفاده میکند، یک
SyntaxErrorایجاد میکند و کاربر را مجبور میکند که از یکی از سایر علامتهای نقلقول موجود استفاده کند (مانند استفاده از علامت نقلقول دوتایی یا سهتایی، در صورتی که افاسترینگ از علامت نقلقول تکی استفاده کند). در پایتون 3.12، اکنون میتوانید کارهایی مانند این انجام دهید:>>> songs = ['Take me back to Eden', 'Alkaline', 'Ascensionism'] >>> f"This is the playlist: {", ".join(songs)}" 'This is the playlist: Take me back to Eden, Alkaline, Ascensionism'
توجه داشته باشید که پیش از این تغییر، هیچ محدودیت صریحی در نحوه تودرتو شدن افاسترینگها وجود نداشت، اما این واقعیت که علامتهای نقلقول رشته را نمیتوان در جزء عبارت افاسترینگها بازاستفاده کرد، تودرتو کردن افاسترینگها به شکل دلخواه را غیرممکن میکرد. در واقع، این تودرتوترین افاسترینگی است که میشد نوشت:
>>> f"""{f'''{f'{f"{1+1}"}'}'''}""" '2'
از آنجا که افاسترینگها اکنون میتوانند هر عبارت معتبر پایتون را درون اجزای عبارت خود دربرگیرند، اکنون میتوان افاسترینگها را بهصورت دلخواه تودرتو کرد:
>>> f"{f"{f"{f"{f"{f"{1+1}"}"}"}"}"}" '2'
عبارتها و کامنتهای چندسطری: در پایتون 3.11، عبارتهای افاسترینگ باید در یک سطر واحد تعریف شوند، حتی اگر عبارت درون افاسترینگ بهطور معمول بتواند چند سطر را در بر بگیرد (مانند فهرستهای لفظی که در چند سطر تعریف میشوند)، که این امر خواندن آنها را دشوارتر میکند. در پایتون 3.12 اکنون میتوانید افاسترینگهایی تعریف کنید که چند سطر را در بر میگیرند و کامنتهای درونخطی اضافه کنید:
>>> f"This is the playlist: {", ".join([ ... 'Take me back to Eden', # My, my, those eyes like fire ... 'Alkaline', # Not acid nor alkaline ... 'Ascensionism' # Take to the broken skies at last ... ])}" 'This is the playlist: Take me back to Eden, Alkaline, Ascensionism'بکاسلشها و نویسههای یونیکد: پیش از پایتون 3.12، عبارتهای افاسترینگ نمیتوانستند هیچ نویسهی
\داشته باشند. این موضوع بر دنبالههای خنثیسازی یونیکد (مانند\N{snowman}) نیز اثر میگذاشت، زیرا این دنبالهها شامل بخش\Nهستند که پیشتر نمیتوانست بخشی از اجزای عبارت افاسترینگها باشد. اکنون میتوانید عبارتهایی مانند این تعریف کنید:>>> print(f"This is the playlist: {"\n".join(songs)}") This is the playlist: Take me back to Eden Alkaline Ascensionism >>> print(f"This is the playlist: {"\N{BLACK HEART SUIT}".join(songs)}") This is the playlist: Take me back to Eden♥Alkaline♥Ascensionism
برای جزئیات بیشتر به PEP 701 مراجعه کنید.
بهعنوان یک اثر جانبی مثبت از نحوه پیادهسازی این قابلیت (با تجزیه افاسترینگها توسط پارسر PEG)، اکنون پیامهای خطای افاسترینگها دقیقتر هستند و مکان دقیق خطا را در بر میگیرند. برای مثال، در پایتون 3.11، افاسترینگ زیر یک SyntaxError ایجاد میکند:
>>> my_string = f"{x z y}" + f"{1 + 1}"
File "<stdin>", line 1
(x z y)
^^^
SyntaxError: f-string: invalid syntax. Perhaps you forgot a comma?
اما پیام خطا مکان دقیق خطا درون سطر را شامل نمیشود و همچنین عبارت بهطور مصنوعی درون پرانتز قرار گرفته است. در پایتون 3.12، از آنجا که افاسترینگها با پارسر PEG تجزیه میشوند، پیامهای خطا میتوانند دقیقتر باشند و کل سطر را نشان دهند:
>>> my_string = f"{x z y}" + f"{1 + 1}"
File "<stdin>", line 1
my_string = f"{x z y}" + f"{1 + 1}"
^^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
(با مشارکت Pablo Galindo، Batuhan Taskaya، Lysandros Nikolaou، Cristián Maureira-Fredes و Marta Gómez در gh-102856. PEP نوشتهشده توسط Pablo Galindo، Batuhan Taskaya، Lysandros Nikolaou و Marta Gómez).
PEP 684: قفل مفسر سراسری به ازای هر مفسر¶
PEP 684 یک قفل مفسر سراسری برای هر مفسر معرفی میکند، بهطوریکه اکنون میتوان زیرمفسرها را با یک قفل مفسر سراسری یکتا برای هر مفسر ایجاد کرد. این امر به برنامههای پایتون اجازه میدهد که بهطور کامل از چندین هستهی CPU بهره ببرند. این قابلیت در حال حاضر فقط از طریق C-API در دسترس است، هرچند یک API پایتونی برای 3.13 پیشبینی شده است.
برای ایجاد مفسری با قفل مفسر سراسری مخصوص به خود، از تابع جدید Py_NewInterpreterFromConfig() استفاده کنید:
PyInterpreterConfig config = {
.check_multi_interp_extensions = 1,
.gil = PyInterpreterConfig_OWN_GIL,
};
PyThreadState *tstate = NULL;
PyStatus status = Py_NewInterpreterFromConfig(&tstate, &config);
if (PyStatus_Exception(status)) {
return -1;
}
/* مفسر جدید اکنون در نخ فعلی فعال است. */
برای مثالهای بیشتر دربارهی نحوهی استفاده از C-API برای زیرمفسرها با قفل مفسر سراسری (GIL) اختصاصی هر مفسر، به Modules/_xxsubinterpretersmodule.c مراجعه کنید.
(مشارکتشده توسط اریک اسنو در gh-104210 و غیره.)
PEP 669: نظارت کمتأثیر برای سیپایتون¶
PEP 669 یک API جدید تعریف میکند که به پروفایلگیرها، اشکالزداها و دیگر ابزارها امکان میدهد رویدادها را در سیپایتون پایش کنند. این API طیف گستردهای از رویدادها را در بر میگیرد، از جمله فراخوانیها، بازگشتها، سطرها، استثناها، پرشها و موارد دیگر. این بدان معناست که فقط بابت آنچه استفاده میکنید هزینه میپردازید و همین امر پشتیبانی از اشکالزداها و ابزارهای پوشش با سربار نزدیک به صفر را فراهم میکند. برای جزئیات به sys.monitoring مراجعه کنید.
(مشارکتشده توسط مارک شانون در gh-103082.)
PEP 688: دسترسپذیر کردن پروتکل بافر در پایتون¶
PEP 688 راهی برای استفاده از پروتکل بافر در کد پایتون معرفی میکند. کلاسهایی که متد __buffer__() را پیادهسازی میکنند، اکنون بهعنوان نوعهای بافر قابل استفادهاند.
کلاس پایه انتزاعی جدید collections.abc.Buffer راهی استاندارد برای بازنمایی اشیاء بافر فراهم میکند، برای مثال در حاشیهنویسی نوع. enum جدید inspect.BufferFlags پرچمهایی را نمایش میدهد که میتوان از آنها برای سفارشیسازی ایجاد بافر استفاده کرد. (ارائهشده توسط Jelle Zijlstra در gh-102500.)
PEP 709: درونخطیسازی درکها¶
درکهای دیکشنری، فهرست و مجموعه اکنون بهصورت درونخطی (inlined) درمیآیند، بهجای آنکه برای هر اجرای درک، یک شیء تابع جدید یکبارمصرف ساخته شود. این امر سرعت اجرای یک درک را تا دو برابر افزایش میدهد. برای جزئیات بیشتر به PEP 709 مراجعه کنید.
متغیرهای پیمایش درک مجزا باقی میمانند؛ متغیری با همان نام در محدوده بیرونی را بازنویسی نمیکنند و پس از درک نیز قابل مشاهده نیستند. درونخطیسازی چند تغییر رفتاری قابل مشاهده به همراه دارد:
دیگر در ردگیریها فریم جداگانهای برای درک وجود ندارد، و ردگیری/پروفایلگیری دیگر درک را بهعنوان فراخوانی تابع نشان نمیدهد.
ماژول
symtableدیگر برای هر درک، جدولهای نماد فرزند تولید نخواهد کرد؛ در عوض، متغیرهای محلی درک در جدول نماد تابع والد گنجانده خواهند شد.فراخوانی
locals()درون یک درک اکنون متغیرهای بیرون از درک را شامل میشود و دیگر متغیر مصنوعی.0برای «آرگومان» درک را شامل نمیشود.درکی که مستقیماً روی
locals()پیمایش میکند (مثلاً[k for k in locals()]) ممکن است هنگامی که تحت ردیابی اجرا شود (مثلاً اندازهگیری پوشش کد) با خطای "RuntimeError: dictionary changed size during iteration" روبهرو شود. این همان رفتاری است که از قبل در مواردی مانندfor k in locals():دیده میشود. برای پرهیز از این خطا، ابتدا فهرستی از کلیدها برای پیمایش ایجاد کنید:keys = list(locals()); [k for k in keys].
(مشارکتشده توسط Carl Meyer و Vladimir Matveev در PEP 709.)
پیامهای خطای بهبودیافته¶
اکنون هنگامی که
NameErrorبه بالاترین سطح پرتاب میشود، ممکن است ماژولهای کتابخانه استاندارد بهعنوان بخشی از پیامهای خطایی که مفسر نمایش میدهد پیشنهاد شوند. (مشارکتشده توسط Pablo Galindo در gh-98254.)>>> sys.version_info Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'sys' is not defined. Did you forget to import 'sys'?
پیشنهاد خطا در استثناهای
NameErrorبرای نمونهها بهبود یافت. اکنون اگر یکNameErrorدر یک متد مطرح شود و نمونه ویژگیای داشته باشد که دقیقاً برابر با نام موجود در استثنا باشد، پیشنهاد بهجای نزدیکترین تطابق در محدوده متد، شاملself.<NAME>خواهد بود. (مشارکتشده توسط Pablo Galindo در gh-99139.)>>> class A: ... def __init__(self): ... self.blech = 1 ... ... def foo(self): ... somethin = blech ... >>> A().foo() Traceback (most recent call last): File "<stdin>", line 1 somethin = blech ^^^^^ NameError: name 'blech' is not defined. Did you mean: 'self.blech'?
پیام خطای
SyntaxErrorهنگامی که کاربر بهجایfrom y import xعبارتimport x from yرا تایپ میکند، بهبود یافت. (مشارکتشده توسط پابلو گالیندو در gh-98931.)>>> import a.y.z from b.y.z Traceback (most recent call last): File "<stdin>", line 1 import a.y.z from b.y.z ^^^^^^^^^^^^^^^^^^^^^^^ SyntaxError: Did you mean to use 'from ... import ...' instead?
استثناهای
ImportErrorکه از دستورهای ناموفقfrom <module> import <name>ایجاد میشوند، اکنون بر اساس نامهای موجود در<module>پیشنهادهایی برای مقدار<name>در بر میگیرند. (مشارکتشده توسط پابلو گالیندو در gh-91058.)>>> from collections import chainmap Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: cannot import name 'chainmap' from 'collections'. Did you mean: 'ChainMap'?
سایر تغییرات زبان¶
پارسر اکنون هنگام تجزیه کد منبع حاوی بایتهای تهی، خطای
SyntaxErrorایجاد میکند. (مشارکت از پابلو گالیندو در gh-96670.)جفت بکاسلش-نویسهای که دنباله گریز معتبری نیست، اکنون بهجای
DeprecationWarningیکSyntaxWarningتولید میکند. برای مثال،re.compile("\d+\.\d+")اکنون یکSyntaxWarningمنتشر میکند ("\d"یک دنباله گریز نامعتبر است؛ برای عبارت باقاعده از رشتههای خام استفاده کنید:re.compile(r"\d+\.\d+")). در یک نسخهی آینده پایتون، سرانجام بهجایSyntaxWarningیکSyntaxErrorمطرح خواهد شد. (مشارکتشده توسط Victor Stinner در gh-98401.)گریزهای مبنای هشت با مقدار بزرگتر از
0o377(مثلاً"\477") که در پایتون 3.11 منسوخ شده بودند، اکنون بهجایDeprecationWarningیکSyntaxWarningتولید میکنند. در نسخهای آینده از پایتون، آنها سرانجام بهSyntaxErrorتبدیل خواهند شد. (مشارکتشده توسط Victor Stinner در gh-98401.)متغیرهایی که در بخش هدف درکها استفاده میشوند اما در آنها ذخیرهسازی انجام نمیشود، اکنون میتوانند در عبارتهای انتساب (
:=) به کار روند. برای نمونه، در[(b := 1) for a, b.prop in some_iter]، انتساب بهbاکنون مجاز است. توجه داشته باشید که انتساب به متغیرهایی که در بخش هدف درکها در آنها ذخیرهسازی انجام میشود (مانندa)، مطابق PEP 572 همچنان مجاز نیست. (مشارکتشده توسط نیکیتا سوبولف در gh-100581.)استثناهایی که در متد
__set_name__یک کلاس یا نوع ایجاد میشوند، دیگر توسطRuntimeErrorدر بر گرفته نمیشوند. اطلاعات زمینه بهعنوان یک یادداشت PEP 678 به استثنا افزوده میشود. (با مشارکت Irit Katriel در gh-77757.)وقتی یک ساختار
try-except*کلExceptionGroupرا مدیریت میکند و استثنای دیگری مطرح میکند، آن استثنا دیگر در یکExceptionGroupپوشش داده نمیشود. همچنین در نسخهی 3.11.4 تغییر کرد. (نوشتهشده توسط Irit Katriel در gh-103590.)زبالهروب اکنون فقط بر اساس سازوکار ارزیابشکن (eval breaker) حلقه ارزیابی بایتکد پایتون اجرا میشود، نه بر اساس تخصیص اشیاء. زبالهروب همچنین میتواند هنگام فراخوانی
PyErr_CheckSignals()اجرا شود تا افزونههای C که باید برای مدت طولانی بدون اجرای هیچ کد پایتونی اجرا شوند نیز فرصتی داشته باشند که زبالهروب را بهطور دورهای اجرا کنند. (مشارکتشده توسط پابلو گالیندو در gh-97922.)همهی فراخوانیپذیرهای توکار و توسعهای که انتظار پارامترهای بولی را دارند، اکنون آرگومانهایی از هر نوع را میپذیرند، نه فقط
boolوint. (نوشتهشده توسط Serhiy Storchaka در gh-60203.)memoryviewاکنون از نوع ممیز شناور با دقت نصف پشتیبانی میکند (کد قالب "e"). (مشارکتشده توسط Donghee Na و Antoine Pitrou در gh-90751.)اشیاء
sliceاکنون هشپذیر هستند و میتوان از آنها بهعنوان کلیدهای دیکشنری و آیتمهای مجموعه استفاده کرد. (با مشارکت Will Bradshaw، Furkan Onder و Raymond Hettinger در gh-101264.)sum()اکنون از جمعزنی نومایر (Neumaier summation) برای بهبود دقت و جابهجایی هنگام جمع کردن اعداد اعشاری یا ترکیبی از اعداد صحیح و اعشاری استفاده میکند. (مشارکتشده توسط Raymond Hettinger در gh-100425.)ast.parse()اکنون هنگام تجزیهی کد منبع حاوی بایتهای تهی، بهجایValueErrorاستثنایSyntaxErrorمطرح میکند. (مشارکتشده توسط پابلو گالیندو در gh-96670.)متدهای استخراج در
tarfileوshutil.unpack_archive()آرگومان جدید فیلتر دارند که اجازه میدهد ویژگیهای tar که ممکن است غافلگیرکننده یا خطرناک باشند، محدود شوند؛ مانند ایجاد پروندهها خارج از پوشه مقصد. برای جزئیات، فیلترهای استخراج tarfile را ببینید. در پایتون 3.14، مقدار پیشفرض به'data'تغییر خواهد کرد. (مشارکتشده توسط Petr Viktorin در PEP 706.)نمونههای
types.MappingProxyTypeاکنون در صورتی هشپذیر هستند که نگاشت زیرین هشپذیر باشد. (مشارکتشده توسط Serhiy Storchaka در gh-87995.)افزودن پشتیبانی از پروفایلگیر perf از طریق متغیر محیطی جدید
PYTHONPERFSUPPORTو گزینه خط فرمان-X perf، و همچنین توابع جدیدsys.activate_stack_trampoline()،sys.deactivate_stack_trampoline()وsys.is_stack_trampoline_active(). (طراحی توسط Pablo Galindo. مشارکتشده توسط Pablo Galindo و Christian Heimes با همکاری Gregory P. Smith [Google] و Mark Shannon در gh-96123.)
ماژولهای جدید¶
None.
ماژولهای بهبودیافته¶
array¶
کلاس
array.arrayاکنون از زیرنویسی پشتیبانی میکند و این آن را به یک نوع عام تبدیل میکند. (مشارکتشده توسط Jelle Zijlstra در gh-98658.)
asyncio¶
کارایی نوشتن در سوکتها در
asyncioبهطور چشمگیری بهبود یافته است.asyncioاکنون هنگام نوشتن در سوکتها از کپیکردن غیرضروری پرهیز میکند و در صورتی که پلتفرم از آن پشتیبانی کند، ازsendmsg()استفاده میکند. (مشارکت Kumar Aditya در gh-91166.)توابع
asyncio.eager_task_factory()وasyncio.create_eager_task_factory()اضافه شدند تا امکان فعالسازی اجرای فوری (eager) وظیفهها در حلقه رویداد فراهم شود و برخی موارد استفاده ۲ تا ۵ برابر سریعتر شوند. (ارائهشده توسط Jacob Bower و Itamar Oren در gh-102853، gh-104140 و gh-104138)در لینوکس،
asyncioدر صورتی کهos.pidfd_open()در دسترس و کارا باشد، بهطور پیشفرض بهجایasyncio.ThreadedChildWatcherازasyncio.PidfdChildWatcherاستفاده میکند. (با مشارکت Kumar Aditya در gh-98024.)حلقه رویداد اکنون از بهترین پایشگر فرزند (child watcher) موجود برای هر پلتفرم استفاده میکند (
asyncio.PidfdChildWatcherدر صورت پشتیبانی و در غیر این صورتasyncio.ThreadedChildWatcher)، بنابراین پیکربندی دستی پایشگر فرزند توصیه نمیشود. (مشارکتشده توسط Kumar Aditya در gh-94597.)پارامتر loop_factory به
asyncio.run()اضافه شد تا بتوان یک کارخانهی سفارشی حلقه رویداد را مشخص کرد. (مشارکت Kumar Aditya در gh-99388.)افزودن پیادهسازی C برای
asyncio.current_task()با افزایش سرعت ۴ تا ۶ برابری. (مشارکت توسط Itamar Oren و Pranav Thulasiram Bhat در gh-100344.)asyncio.iscoroutine()اکنون برای تولیدگرهاFalseبرمیگرداند، زیراasyncioاز همروالهای قدیمی مبتنی بر تولیدگر پشتیبانی نمیکند. (مشارکتشده توسط Kumar Aditya در gh-102748.)asyncio.wait()وasyncio.as_completed()اکنون تولیدگرهایی که وظیفه تولید میکنند را میپذیرند. (مشارکت Kumar Aditya در gh-78530.)
calendar¶
enumهای
calendar.Monthوcalendar.Dayکه ماههای سال و روزهای هفته را تعریف میکنند، اضافه شدند. (مشارکتشده توسط Prince Roshan در gh-103636.)
csv¶
پرچمهای
csv.QUOTE_NOTNULLوcsv.QUOTE_STRINGSافزوده شدند تا کنترل دقیقتری برNoneو رشتههای خالی توسط اشیاءreaderوwriterفراهم کنند.
dis¶
کدهای عمل شبهدستور (که توسط کامپایلر استفاده میشوند، اما در بایتکد اجرایی ظاهر نمیشوند) اکنون در ماژول
disدر معرض نمایش قرار گرفتهاند.HAVE_ARGUMENTهمچنان برای کدهای عمل واقعی مرتبط است، اما برای شبهدستورها مفید نیست. بهجای آن از مجموعهی جدیدdis.hasargاستفاده کنید. (مشارکتشده توسط Irit Katriel در gh-94216.)افزودن مجموعهی
dis.hasexcبرای نشان دادن دستورالعملهایی که هندلر استثنا را تنظیم میکنند. (مشارکتشده توسط Irit Katriel در gh-94216.)
fractions¶
اشیاء از نوع
fractions.Fractionاکنون از قالببندی به سبک اعشاری پشتیبانی میکنند. (مشارکتشده توسط Mark Dickinson در gh-100161.)
importlib.resources¶
importlib.resources.as_file()اکنون از پوشههای منبع پشتیبانی میکند. (مشارکتشده توسط Jason R. Coombs در gh-97930.)نام پارامتر اول
importlib.resources.files()به anchor تغییر کرد. (مشارکت Jason R. Coombs در gh-100598.)
inspect¶
افزودن
inspect.markcoroutinefunction()برای علامتگذاری توابع همگامی که یک همروال برمیگردانند تا باinspect.iscoroutinefunction()استفاده شوند. (مشارکتشده توسط کارلتون گیبسون در gh-99247.)افزودن
inspect.getasyncgenstate()وinspect.getasyncgenlocals()برای تعیین وضعیت فعلی تولیدگرهای ناهمگام. (مشارکت توسط Thomas Krennwallner در gh-79940.)کارایی
inspect.getattr_static()بهطور قابلتوجهی بهبود یافته است. بیشتر فراخوانیهای این تابع باید حداقل ۲ برابر سریعتر از پایتون 3.11 باشند. (مشارکت Alex Waygood در gh-103193.)
itertools¶
افزودن
itertools.batched()برای جمعآوری در تاپلهای هماندازه که در آن آخرین دسته ممکن است کوتاهتر از بقیه باشد. (مشارکتشده توسط Raymond Hettinger در gh-98363.)
math¶
افزودن
math.sumprod()برای محاسبهی مجموع حاصلضربها. (مشارکتشده توسط Raymond Hettinger در gh-100485.)تابع
math.nextafter()توسعه یافت تا شامل آرگومان steps برای حرکت به بالا یا پایین چندین گام در هر بار شود. (مشارکت Matthias Goergens، Mark Dickinson و Raymond Hettinger در gh-94906.)
os¶
ثابت
os.PIDFD_NONBLOCKافزوده شد تا بتوان با استفاده ازos.pidfd_open()توصیفگر پروندهای را برای یک فرایند در حالت غیرمسدود باز کرد. (مشارکتشده توسط Kumar Aditya در gh-93312.)os.DirEntryاکنون شامل متدos.DirEntry.is_junction()برای بررسی اتصال بودن ورودی است. (مشارکتشده توسط Charles Machalow در gh-99547.)افزودن توابع
os.listdrives()،os.listvolumes()وos.listmounts()در ویندوز برای شمارش درایوها، حجمها و نقاط اتصال. (مشارکتشده توسط Steve Dower در gh-102519.)os.stat()وos.lstat()اکنون در ویندوز دقیقتر هستند. فیلدst_birthtimeاکنون با زمان ایجاد پرونده پر میشود، وst_ctimeمنسوخ شده است اما همچنان شامل زمان ایجاد است (اما در آینده، برای سازگاری با سکوهای دیگر، آخرین تغییر فراداده را بازخواهد گرداند). بسته به سامانه فایلبندی شما،st_devممکن است تا ۶۴ بیت وst_inoتا ۱۲۸ بیت باشد، وst_rdevهمیشه بهجای مقادیر نادرست، روی صفر تنظیم میشود. هر دو تابع ممکن است در نسخههای جدیدتر ویندوز بهطور قابلتوجهی سریعتر باشند. (مشارکتشده توسط Steve Dower در gh-99726.)
os.path¶
تابع
os.path.isjunction()برای بررسی اینکه آیا یک مسیر دادهشده اتصال است یا خیر، افزوده شد. (مشارکتشده توسط Charles Machalow در gh-99547.)تابع
os.path.splitroot()برای تجزیهی یک مسیر به سهتایی(drive, root, tail)افزوده شد. (مشارکتشده توسط Barney Gale در gh-101000.)
pathlib¶
افزودن پشتیبانی از زیرکلاسسازی
pathlib.PurePathوpathlib.Path، بههمراه گونههای مخصوص Posix و Windows آنها. زیرکلاسها میتوانند متدpathlib.PurePath.with_segments()را بازنویسی کنند تا اطلاعات را بین نمونههای مسیر منتقل کنند.افزودن
pathlib.Path.walk()برای پیمایش درختهای پوشه و تولید تمام نامهای پرونده یا پوشه درون آنها، مشابهos.walk(). (مشارکتشده توسط Stanislav Zmiev در gh-90385.)افزودن پارامتر اختیاری walk_up به
pathlib.PurePath.relative_to()برای اجازهدادن به درج ورودیهای..در نتیجه؛ این رفتار باos.path.relpath()سازگاری بیشتری دارد. (مشارکتشده توسط Domenico Ragusa در gh-84538.)افزودن
pathlib.Path.is_junction()بهعنوان پراکسی برایos.path.isjunction(). (مشارکت Charles Machalow در gh-99547.)افزودن پارامتر اختیاری case_sensitive به
pathlib.Path.glob()،pathlib.Path.rglob()وpathlib.PurePath.match()برای تطبیق بر اساس حساسیت به بزرگی و کوچکی حروف مسیر، که امکان کنترل دقیقتری بر فرایند تطبیق را فراهم میکند.
platform¶
پشتیبانی از تشخیص ویندوز ۱۱ و نسخههای ویندوز سرور پس از ۲۰۱۲ اضافه شد. پیشتر، جستجوها روی پلتفرمهای ویندوز سرور جدیدتر از ویندوز سرور ۲۰۱۲ و روی ویندوز ۱۱ مقدار
Windows-10را برمیگرداندند. (مشارکت استیو داور در gh-89545.)
pdb¶
افزودن متغیرهای کمکی (convenience variables) برای نگهداری موقت مقادیر در طول نشست اشکالزدایی و فراهمکردن دسترسی سریع به مقادیری مانند فریم فعلی یا مقدار بازگشتی. (مشارکتشده توسط Tian Gao در gh-103693.)
random¶
افزودن
random.binomialvariate(). (با مشارکت Raymond Hettinger در gh-81620.)افزودن مقدار پیشفرض
lambd=1.0بهrandom.expovariate(). (مشارکتشده توسط Raymond Hettinger در gh-100234.)
shutil¶
shutil.make_archive()اکنون آرگومان root_dir را به آرشیوکنندههای سفارشیای که از آن پشتیبانی میکنند، ارسال میکند. در این حالت، این تابع برای انجام آرشیو، دیگر پوشهی کاری جاری فرایند را بهطور موقت به root_dir تغییر نمیدهد. (مشارکت Serhiy Storchaka در gh-74696.)shutil.rmtree()اکنون آرگومان جدید onexc را میپذیرد که هندلر خطایی مانند onerror است، اما بهجای سهتایی (typ, val, tb) یک نمونه از استثنا را انتظار دارد. onerror منسوخ شده است. (مشارکتشده توسط ایریت کاتریل در gh-102828.)shutil.which()اکنون در ویندوز، حتی وقتی cmd دادهشده شامل جزء پوشه است، برای یافتن تطبیقها درون PATH به متغیر محیطی PATHEXT مراجعه میکند. (مشارکتشده توسط Charles Machalow در gh-103179.)shutil.which()هنگام جستجوی پروندههای اجرایی در ویندوز،NeedCurrentDirectoryForExePathWرا فراخوانی میکند تا تعیین کند که آیا پوشهی کاری جاری باید به ابتدای مسیر جستجو افزوده شود یا خیر. (مشارکتشده توسط Charles Machalow در gh-103179.)در ویندوز،
shutil.which()پیش از تطبیق مستقیم در جای دیگر از مسیر جستجو، مسیری مطابق با cmd بههمراه جزئی ازPATHEXTرا برمیگرداند. (مشارکتشده توسط Charles Machalow در gh-103179.)
sqlite3¶
افزودن رابط خط فرمان. (مشارکتشده توسط Erlend E. Aasland در gh-77617.)
ویژگی
sqlite3.Connection.autocommitبهsqlite3.Connectionو پارامتر autocommit بهsqlite3.connect()اضافه شدند تا مدیریت تراکنش سازگار با PEP 249 را کنترل کنند. (مشارکتشده توسط Erlend E. Aasland در gh-83638.)پارامتر فقطکلیدواژهای entrypoint به
sqlite3.Connection.load_extension()افزوده شد تا بتوان نقطه ورود افزونه SQLite را بازتعریف کرد. (مشارکتشده توسط Erlend E. Aasland در gh-103015.)متدهای
sqlite3.Connection.getconfig()وsqlite3.Connection.setconfig()بهsqlite3.Connectionافزوده شدند تا بتوان تغییرات پیکربندی را روی یک اتصال پایگاه داده اعمال کرد. (مشارکتشده توسط Erlend E. Aasland در gh-103489.)
statistics¶
تابع
statistics.correlation()گسترش یافت تا روشrankedرا برای محاسبهی همبستگی اسپیرمن دادههای رتبهبندیشده در بر بگیرد. (با مشارکت Raymond Hettinger در gh-95861.)
sys¶
فضای نام
sys.monitoringبرای در دسترس قرار دادن API جدید پایش PEP 669 افزوده شد. (با مشارکت Mark Shannon در gh-103082.)افزودن
sys.activate_stack_trampoline()وsys.deactivate_stack_trampoline()برای فعال کردن و غیرفعال کردن ترامپولینهای پروفایلگیر پشته، وsys.is_stack_trampoline_active()برای پرسوجو دربارهی فعال بودن ترامپولینهای پروفایلگیر پشته. (مشارکتشده توسط Pablo Galindo و Christian Heimes همراه با مشارکت Gregory P. Smith [Google] و Mark Shannon در gh-96123.)افزودن
sys.last_excکه آخرین استثنای مدیریتنشدهی مطرحشده را نگه میدارد (برای موارد استفاده از اشکالزدایی پس از خاتمه). منسوخ کردن سه فیلدی که همان اطلاعات را به شکل قدیمی خود دارند:sys.last_type،sys.last_valueوsys.last_traceback. (مشارکتشده توسط Irit Katriel در gh-102778.)sys._current_exceptions()اکنون نگاشتی از شناسهی نخ به نمونهای از استثنا برمیگرداند، نه به تاپل(typ, exc, tb). (مشارکت Irit Katriel در gh-103176.)sys.setrecursionlimit()وsys.getrecursionlimit(). حد بازگشتی اکنون فقط به کد پایتون اعمال میشود. توابع توکار از حد بازگشتی استفاده نمیکنند، اما توسط سازوکاری متفاوت محافظت میشوند که از فروپاشی ماشین مجازی در اثر بازگشتی جلوگیری میکند.
tempfile¶
تابع
tempfile.NamedTemporaryFileدارای پارامتر اختیاری جدید delete_on_close است (مشارکت Evgeny Zorin در gh-58451.)tempfile.mkdtemp()اکنون همیشه یک مسیر مطلق برمیگرداند، حتی اگر آرگومان ارائهشده به پارامتر dir یک مسیر نسبی باشد.
threading¶
افزودن
threading.settrace_all_threads()وthreading.setprofile_all_threads()که اجازه میدهند توابع ردگیری و پروفایلگیری در همهی نخهای در حال اجرا، علاوه بر نخ فراخواننده، تنظیم شوند. (مشارکت Pablo Galindo در gh-93503.)
tkinter¶
tkinter.Canvas.coords()اکنون آرگومانهای خود را تختسازی میکند. این متد اکنون نهتنها مختصات را بهصورت آرگومانهای جداگانه (x1, y1, x2, y2, ...) و بهصورت دنبالهای از مختصات ([x1, y1, x2, y2, ...]) میپذیرد، بلکه مختصات گروهبندیشده به شکل جفتها ((x1, y1), (x2, y2), ...و[(x1, y1), (x2, y2), ...]) را نیز میپذیرد، مانند متدهایcreate_*(). (مشارکتشده توسط Serhiy Storchaka در gh-94473.)
tokenize¶
ماژول
tokenizeشامل تغییرات معرفیشده در PEP 701 است. (مشارکتشده توسط Marta Gómez Macías و Pablo Galindo در gh-102856.) برای اطلاعات بیشتر دربارهی تغییرات ماژولtokenize، به انتقال به پایتون 3.12 مراجعه کنید.
types¶
افزودن
types.get_original_bases()برای فراهم کردن امکان دروننگری بیشتر در انواع عام تعریفشده توسط کاربر زمانی که از آنها زیرکلاسسازی شود. (مشارکتشده توسط James Hilton-Balfe و Alex Waygood در gh-101827.)
typing¶
بررسیهای
isinstance()نسبت بهپروتکلهای بررسیپذیر در زمان اجرااکنون برای یافتن اینکه آیا ویژگیها وجود دارند یا خیر، بهجایhasattr()ازinspect.getattr_static()استفاده میکنند. این بدان معناست که توصیفگرها و متدهای__getattr__()دیگر بهطور غیرمنتظره در طول بررسیهایisinstance()نسبت به پروتکلهای بررسیپذیر در زمان اجرا ارزیابی نمیشوند. با این حال، این ممکن است بدان معنا نیز باشد که برخی اشیایی که پیشتر نمونههایی از یک پروتکل بررسیپذیر در زمان اجرا در نظر گرفته میشدند، در پایتون 3.12+ ممکن است دیگر نمونههایی از آن پروتکل در نظر گرفته نشوند، و برعکس. بعید است که بیشتر کاربران تحت تأثیر این تغییر قرار بگیرند. (مشارکتشده توسط Alex Waygood در gh-102433.)اعضای یک پروتکل بررسیپذیر در رانتایم، اکنون به محض اینکه کلاس ایجاد شود، در رانتایم «فریزشده» در نظر گرفته میشوند. مانکیپچ کردن ویژگیها روی یک پروتکل بررسیپذیر در رانتایم همچنان کار خواهد کرد، اما هیچ تأثیری بر بررسیهای
isinstance()که اشیاء را با پروتکل مقایسه میکنند نخواهد داشت. برای مثال:>>> from typing import Protocol, runtime_checkable >>> @runtime_checkable ... class HasX(Protocol): ... x = 1 ... >>> class Foo: ... ... >>> f = Foo() >>> isinstance(f, HasX) False >>> f.x = 1 >>> isinstance(f, HasX) True >>> HasX.y = 2 >>> isinstance(f, HasX) # unchanged, even though HasX now also has a "y" attribute True
این تغییر بهمنظور سرعت بخشیدن به بررسیهای
isinstance()روی پروتکلهای بررسیپذیر در زمان اجرا انجام شد.پروفایل کارایی بررسیهای
isinstance()باپروتکلهای قابل بررسی در زمان اجرابهطور قابل توجهی تغییر کرده است. بیشتر بررسیهایisinstance()با پروتکلهایی که تنها چند عضو دارند، باید دستکم ۲ برابر سریعتر از 3.11 باشند و برخی ممکن است ۲۰ برابر سریعتر یا بیشتر باشند. با این حال، بررسیهایisinstance()با پروتکلهایی که اعضای زیادی دارند، ممکن است نسبت به پایتون 3.11 کندتر باشند. (مشارکتشده توسط Alex Waygood در gh-74690 و gh-103193.)تمام کلاسهای
typing.TypedDictوtyping.NamedTupleاکنون دارای ویژگی__orig_bases__هستند. (ارائهشده توسط آدریان گارسیا باداراکو در gh-103699.)افزودن پارامتر
frozen_defaultبه@typing.dataclass_transform. (ارائهشده توسط Erik De Bonte در gh-99957.)
unicodedata¶
پایگاه داده یونیکد به نسخهی 15.0.0 بهروزرسانی شده است. (با مشارکت Benjamin Peterson در gh-96734).
unittest¶
افزودن گزینهی خط فرمان --durations که N مورد از کندترین موارد آزمون را نشان میدهد:
python3 -m unittest --durations=3 lib.tests.test_threading
.....
Slowest test durations
----------------------------------------------------------------------
1.210s test_timeout (Lib.test.test_threading.BarrierTests)
1.003s test_default_timeout (Lib.test.test_threading.BarrierTests)
0.518s test_timeout (Lib.test.test_threading.EventTests)
(0.000 durations hidden. Use -v to show these durations.)
----------------------------------------------------------------------
Ran 158 tests in 9.869s
OK (skipped=3)
(مشارکتشده توسط Giampaolo Rodola در gh-48330)
uuid¶
یک رابط خط فرمان افزوده شد. (مشارکتشده توسط Adam Chhina در gh-88597.)
بهینهسازیها¶
اعضای
wstrوwstr_lengthاز اشیاء یونیکد حذف شدند. این کار اندازه شیء را در پلتفرمهای ۶۴بیتی به میزان ۸ یا ۱۶ بایت کاهش میدهد. (PEP 623) (مشارکتشده توسط Inada Naoki در gh-92536.)افزودن پشتیبانی آزمایشی برای استفاده از بهینهساز دودویی BOLT در فرایند ساخت، که عملکرد را ۱ تا ۵ درصد بهبود میبخشد. (مشارکتشده توسط Kevin Modzelewski در gh-90536 و تنظیمشده توسط Donghee Na در gh-101525)
سرعت جایگزینی عبارت باقاعده (توابع
re.sub()وre.subn()و متدهای متناظرre.Pattern) برای رشتههای جایگزینی حاوی ارجاع به گروهها، ۲ تا ۳ برابر افزایش یافت. (با مشارکت Serhiy Storchaka در gh-91524.)ایجاد
asyncio.Taskبا به تعویق انداختن قالببندی پرهزینه رشته، سریعتر میشود. (مشارکتشده توسط ایتامار اورن در gh-103793.)توابع
tokenize.tokenize()وtokenize.generate_tokens()بهعنوان یک اثر جانبی از تغییرات لازم برای پوشش PEP 701 در ماژولtokenize، تا ۶۴٪ سریعتر شدهاند. (مشارکتشده توسط Marta Gómez Macías و Pablo Galindo در gh-102856.)افزایش سرعت فراخوانی متدها و بارگذاری ویژگیها در
super()از طریق دستور جدیدLOAD_SUPER_ATTR. (مشارکتشده توسط Carl Meyer و Vladimir Matveev در gh-103497.)
تغییرات بایتکد سیپایتون¶
دستورالعمل
LOAD_METHODحذف شد. این دستورالعمل درLOAD_ATTRادغام شده است.LOAD_ATTRاکنون اگر کمارزشترین بیت oparg آن تنظیم شده باشد، مانند دستورالعمل قدیمیLOAD_METHODرفتار میکند. (با مشارکت Ken Jin در gh-93429.)دستورهای
JUMP_IF_FALSE_OR_POPوJUMP_IF_TRUE_OR_POPحذف شدند. (مشارکتشده توسط Irit Katriel در gh-102859.)دستورالعمل
PRECALLحذف شد. (مشارکت Mark Shannon در gh-92925.)افزودن دستورهای
BINARY_SLICEوSTORE_SLICE. (مشارکتشده توسط Mark Shannon در gh-94163.)افزودن دستورالعملهای
CALL_INTRINSIC_1. (ارائهشده توسط Mark Shannon در gh-99005.)دستور
CALL_INTRINSIC_2اضافه شد. (مشارکتشده توسط ایریت کاتریل در gh-101799.)دستور
CLEANUP_THROWاضافه شد. (مشارکتشده توسط Brandt Bucher در gh-90997.)افزودن دستورالعمل
END_SEND. (مشارکتشده توسط Mark Shannon در gh-103082.)دستورالعمل
LOAD_FAST_AND_CLEARبهعنوان بخشی از پیادهسازی PEP 709 افزوده شد. (مشارکتکرده توسط Carl Meyer در gh-101441.)افزودن دستورالعمل
LOAD_FAST_CHECK. (با مشارکت Dennis Sweeney در gh-93143.)آپکدهای
LOAD_FROM_DICT_OR_DEREF،LOAD_FROM_DICT_OR_GLOBALSوLOAD_LOCALSبهعنوان بخشی از پیادهسازی PEP 695 افزوده شدند. آپکدLOAD_CLASSDEREFکه میتوان آن را باLOAD_LOCALSبهعلاوهیLOAD_FROM_DICT_OR_DEREFجایگزین کرد، حذف شد. (با مشارکت Jelle Zijlstra در gh-103764.)دستورالعمل
LOAD_SUPER_ATTRافزوده شد. (مشارکتشده توسط کارل مایر و ولادیمیر ماتویف در gh-103497.)دستور
RETURN_CONSTاضافه شد. (با مشارکت Wenyang Wang در gh-101632.)
دموها و ابزارها¶
پوشهی
Tools/demo/که شامل اسکریپتهای نمایشی قدیمی بود، حذف شد. نسخهای از آن را میتوان در پروژهی old-demos یافت. (مشارکتشده توسط Victor Stinner در gh-97681.)اسکریپتهای نمونهی قدیمی از پوشهی
Tools/scripts/حذف شدند. نسخهای از آنها را میتوانید در پروژهی old-demos بیابید. (مشارکتشده توسط Victor Stinner در gh-97669.)
منسوخ¶
argparse: پارامترهای type، choices و metavar درargparse.BooleanOptionalActionمنسوخ شدهاند و در نسخهی 3.14 حذف خواهند شد. (مشارکت Nikita Sobolev در gh-92248.)ast: قابلیتهای زیر ماژولastاز پایتون 3.8 در مستندات منسوخ اعلام شده بودند، اکنون هنگام دسترسی یا استفاده از آنها در رانتایم موجب صدورDeprecationWarningمیشوند و در پایتون 3.14 حذف خواهند شد:ast.Numast.Strast.Bytesast.NameConstantast.Ellipsis
بهجای آن از
ast.Constantاستفاده کنید. (مشارکتشده توسط Serhiy Storchaka در gh-90953.)-
کلاسهای پایشگر فرزند (child watcher)
asyncio.MultiLoopChildWatcher،asyncio.FastChildWatcher،asyncio.AbstractChildWatcherوasyncio.SafeChildWatcherمنسوخ شدهاند و در پایتون 3.14 حذف خواهند شد. (با مشارکت Kumar Aditya در gh-94597.)asyncio.set_child_watcher()،asyncio.get_child_watcher()،asyncio.AbstractEventLoopPolicy.set_child_watcher()وasyncio.AbstractEventLoopPolicy.get_child_watcher()منسوخ شدهاند و در پایتون 3.14 حذف خواهند شد. (مشارکتشده توسط Kumar Aditya در gh-94597.)متد
get_event_loop()سیاست حلقه رویداد پیشفرض اکنون در صورتی که هیچ حلقه رویداد جاریای تنظیمنشده باشد و تصمیم بگیرد یکی ایجاد کند، هشدارDeprecationWarningمنتشر میکند. (مشارکت Serhiy Storchaka و Guido van Rossum در gh-100160.)
calendar: ثابتهایcalendar.Januaryوcalendar.Februaryمنسوخ شدهاند و باcalendar.JANUARYوcalendar.FEBRUARYجایگزین شدهاند. (مشارکتشده توسط Prince Roshan در gh-103636.)collections.abc:collections.abc.ByteStringمنسوخ شده است.برای آزمودن اینکه آیا
objپروتکل بافر را در رانتایم پیادهسازی میکند، ازisinstance(obj, collections.abc.Buffer)استفاده کنید. برای استفاده در حاشیهنویسی نوع، یا ازBufferاستفاده کنید یا از یک اجتماع (union) که صریحاً نوعهایی را که کد شما از آنها پشتیبانی میکند مشخص میکند (مثلاًbytes | bytearray | memoryview).ByteStringدر ابتدا قرار بود یک کلاس انتزاعی باشد که بهعنوان ابرینوع (supertype) هر دوbytesوbytearrayعمل کند. اما از آنجا که این کلاس پایه انتزاعی هرگز هیچ متدی نداشت، دانستن اینکه یک شیء نمونهای ازByteStringاست، در واقع هرگز چیز مفیدی دربارهی آن شیء به شما نمیگفت. سایر نوعهای رایج بافر مانندmemoryviewنیز هرگز بهعنوان زیرنوعهایی ازByteStringدر نظر گرفته نمیشدند (چه در زمان اجرا و چه توسط بررسیگرهای نوع ایستا).برای جزئیات بیشتر به PEP 688 مراجعه کنید. (مشارکتشده توسط شانتانو جین در gh-91896.)
datetime: متدهایutcnow()وutcfromtimestamp()از کلاسdatetime.datetimeمنسوخ شدهاند و در یک نسخهی آینده حذف خواهند شد. به جای آن، برای نمایش تاریخها و زمانها در UTC از شیءهای آگاه از منطقهی زمانی استفاده کنید: به ترتیب،now()وfromtimestamp()را با پارامتر tz تنظیمشده رویdatetime.UTCفراخوانی کنید. (مشارکتشده توسط Paul Ganssle در gh-103857.)email: منسوخ کردن پارامتر isdst درemail.utils.localtime(). (نوشتهشده توسط آلن ویلیامز در gh-72346.)importlib.abc: کلاسهای زیر منسوخ شدند و قرار است در پایتون 3.14 حذف شوند:importlib.abc.ResourceReaderimportlib.abc.Traversableimportlib.abc.TraversableResources
بهجای آن از کلاسهای
importlib.resources.abcاستفاده کنید:(مشارکتشده توسط Jason R. Coombs و Hugo van Kemenade در gh-93963.)
itertools: پشتیبانی از عملیاتهای copy، deepcopy و pickle — که مستندنشده، ناکارآمد، از دیرباز دارای اشکال و ناسازگار است — منسوخ شد. این پشتیبانی در نسخه 3.14 برای کاهش چشمگیر حجم کد و بار نگهداری حذف خواهد شد. (مشارکتشده توسط Raymond Hettinger در gh-101588.)multiprocessing: در پایتون 3.14، روش آغاز پیشفرضmultiprocessingدر لینوکس، BSDها و سایر پلتفرمهای POSIX غیر از macOS که'fork'در حال حاضر در آنها پیشفرض است، به روشی امنتر تغییر خواهد کرد (gh-84559). افزودن هشدار زمان اجرا دربارهی این موضوع بیش از حد مخل تلقی شد، زیرا انتظار نمیرود اکثر کدها به آن اهمیت دهند. از APIهایget_context()یاset_start_method()استفاده کنید تا در مواردی که کد شما به'fork'نیاز دارد، آن را صریحاً مشخص کنید. به زمینهها و روشهای آغاز مراجعه کنید.pkgutil:pkgutil.find_loader()وpkgutil.get_loader()منسوخ شدهاند و در پایتون 3.14 حذف خواهند شد؛ به جای آنها ازimportlib.util.find_spec()استفاده کنید. (مشارکتشده توسط نیکیتا سوبولف در gh-97850.)pty: این ماژول دارای دو تابع مستندنشدهیmaster_open()وslave_open()است که از پایتون ۲ منسوخ شدهاند، اما فقط در 3.12 یکDeprecationWarningمناسب دریافت کردند. آنها را در 3.14 حذف کنید. (ارائهشده توسط Soumendra Ganguly و Gregory P. Smith در gh-85984.)os:فیلدهای
st_ctimeکه توسطos.stat()وos.lstat()در ویندوز برگردانده میشوند، منسوخ شدهاند. در نسخهای آینده، این فیلدها زمان آخرین تغییر فراداده را در بر خواهند داشت که با سایر پلتفرمها هماهنگ است. در حال حاضر، این فیلدها همچنان زمان ایجاد را در بر دارند که در فیلد جدیدst_birthtimeنیز در دسترس است. (مشارکتشده توسط Steve Dower در gh-99726.)در پلتفرمهای POSIX، تابع
os.fork()اکنون میتواند هنگامی که بتواند تشخیص دهد که از یک فرایند چندنخی فراخوانی شده است، یکDeprecationWarningایجاد کند. همیشه هنگام انجام این کار، ناسازگاری بنیادی با پلتفرم POSIX وجود داشته است. حتی اگر چنین کدی بهظاهر کار میکرد. ما این هشدار را برای افزایش آگاهی اضافه کردیم، زیرا مشکلاتی که کدهای انجامدهندهی این کار با آنها روبهرو میشوند رو به افزایش هستند. برای جزئیات بیشتر به مستنداتos.fork()مراجعه کنید و همچنین این بحث دربارهی ناسازگاری فورک با نخها را ببینید تا بدانید چرا اکنون این مشکل دیرینهی سازگاری پلتفرم را برای توسعهدهندگان آشکار میکنیم.
هنگامی که این هشدار به دلیل استفاده از
multiprocessingیاconcurrent.futuresظاهر میشود، راهحل این است که از روش آغاز (start method) متفاوتی مانند"spawn"یا"forkserver"درmultiprocessingاستفاده کنید.shutil: آرگومان onerror درshutil.rmtree()منسوخ شده است؛ بهجای آن از onexc استفاده کنید. (مشارکتشده توسط Irit Katriel در gh-102828.)-
تطبیقگرها (adapter) و مبدلهای پیشفرض اکنون منسوخ شدهاند. در عوض، از دستورپختهای آداپتور و مبدل استفاده کنید و آنها را مطابق نیازهای خود تنظیم کنید. (با مشارکت Erlend E. Aasland در gh-90016.)
در
execute()، هشدارDeprecationWarningاکنون زمانی نشان داده میشود که جاینگهدارهای نامدار به همراه پارامترهایی که بهعنوان sequence و نه بهعنوانdictارائه شدهاند، استفاده شوند. از پایتون 3.14 به بعد، استفاده از جاینگهدارهای نامدار به همراه پارامترهایی که بهعنوان دنباله ارائه شدهاند، باعث ایجادProgrammingErrorخواهد شد. (مشارکتشده توسط Erlend E. Aasland در gh-101698.)
sys: فیلدهایsys.last_type،sys.last_valueوsys.last_tracebackمنسوخ شدهاند. به جای آنها ازsys.last_excاستفاده کنید. (مشارکتشده توسط Irit Katriel در gh-102778.)tarfile: استخراج آرشیوهای tar بدون مشخص کردن filter تا Python 3.14 منسوخ است؛ در آن زمان فیلتر'data'پیشفرض خواهد شد. برای جزئیات به فیلترهای استخراج مراجعه کنید.-
typing.Hashableوtyping.Sized، که بهترتیب نامهای مستعاری برایcollections.abc.Hashableوcollections.abc.Sizedهستند، منسوخ شدهاند. (gh-94309.)typing.ByteStringکه از Python 3.9 منسوخ شده است، اکنون هنگام استفاده از آن باعث میشود یکDeprecationWarningصادر شود. (مشارکتشده توسط Alex Waygood در gh-91896.)
xml.etree.ElementTree: این ماژول اکنون هنگام آزمودن مقدار درستیِ یکxml.etree.ElementTree.Element،DeprecationWarningمنتشر میکند. پیش از این، پیادهسازی پایتونFutureWarningمنتشر میکرد و پیادهسازی C چیزی منتشر نمیکرد. (مشارکتکرده توسط Jacob Walls در gh-83122.)امضاهای سهآرگومانی (type، value، traceback) در
همروال throw()،تولیدگر throw()وتولیدگر ناهمگام throw()منسوخ شدهاند و ممکن است در نسخهای آینده از پایتون حذف شوند. بهجای آن از نسخههای تکآرگومانی این توابع استفاده کنید. (با مشارکت Ofey Chan در gh-89874.)اکنون وقتی
__package__روی یک ماژول با__spec__.parentمتفاوت باشد،DeprecationWarningبرخاسته میشود (پیشترImportWarningبود). (مشارکت توسط Brett Cannon در gh-65961.)تنظیم
__package__یا__cached__روی یک ماژول منسوخ شده است و در پایتون 3.14 سیستم ایمپورت دیگر آنها را تنظیم نخواهد کرد یا در نظر نخواهد گرفت. (مشارکتشده توسط Brett Cannon در gh-65961.)عملگر وارونسازی بیتی (
~) روی bool منسوخ شده است. این عملگر در Python 3.16 خطا پرتاب خواهد کرد. بهجای آن، ازnotبرای نقیه منطقی مقادیر بولی استفاده کنید. در حالت نادر که واقعاً به وارونسازی بیتیintزیرین نیاز دارید، آن را صریحاً به int تبدیل کنید:~int(x). (مشارکتشده توسط Tim Hoffmann در gh-103487.)دسترسی به
co_lnotabروی اشیاء کد در پایتون 3.10 از طریق PEP 626 منسوخ شد، اما تنها در نسخه 3.12 بود که یکDeprecationWarningمناسب دریافت کرد. ممکن است در نسخه 3.15 حذف شود. (مشارکت نیکیتا سوبولف در gh-101866.)
در پایتون 3.13 حذف خواهد شد¶
ماژولها (نگاه کنید به PEP 594):
aifcaudioopcgicgitbchunkcryptimghdrmailcapmsilibnisnntplibossaudiodevpipessndhdrspwdsunautelnetlibuuxdrlib
ماژولهای دیگر:
lib2to3و برنامهی 2to3 (gh-84540)
APIها:
configparser.LegacyInterpolation(gh-90765)locale.resetlocale()(gh-90817)turtle.RawTurtle.settiltangle()(gh-50096)unittest.findTestCases()(gh-50096)unittest.getTestCaseNames()(gh-50096)unittest.makeSuite()(gh-50096)unittest.TestProgram.usageExit()(gh-67048)webbrowser.MacOSX(gh-86421)زنجیرهسازی توصیفگر
classmethod(gh-89519)
در انتظار حذف در پایتون 3.14¶
argparse: پارامترهای type، choices و metavar درargparse.BooleanOptionalActionمنسوخ شدهاند و در نسخهی 3.14 حذف خواهند شد. (مشارکت Nikita Sobolev در gh-92248.)ast: ویژگیهای زیر از زمان پایتون 3.8 در مستندات منسوخ اعلام شدهاند، اکنون هنگامی که به آنها دسترسی پیدا شود یا از آنها استفاده شود، در زمان اجرا موجب صدورDeprecationWarningمیشوند و در پایتون 3.14 حذف خواهند شد:ast.Numast.Strast.Bytesast.NameConstantast.Ellipsis
بهجای آن از
ast.Constantاستفاده کنید. (مشارکتشده توسط Serhiy Storchaka در gh-90953.)-
کلاسهای پایشگر فرزند (child watcher)
asyncio.MultiLoopChildWatcher،asyncio.FastChildWatcher،asyncio.AbstractChildWatcherوasyncio.SafeChildWatcherمنسوخ شدهاند و در پایتون 3.14 حذف خواهند شد. (با مشارکت Kumar Aditya در gh-94597.)asyncio.set_child_watcher()،asyncio.get_child_watcher()،asyncio.AbstractEventLoopPolicy.set_child_watcher()وasyncio.AbstractEventLoopPolicy.get_child_watcher()منسوخ شدهاند و در پایتون 3.14 حذف خواهند شد. (مشارکتشده توسط Kumar Aditya در gh-94597.)متد
get_event_loop()سیاست حلقه رویداد پیشفرض اکنون در صورتی که هیچ حلقه رویداد جاریای تنظیمنشده باشد و تصمیم بگیرد یکی ایجاد کند، هشدارDeprecationWarningمنتشر میکند. (مشارکت Serhiy Storchaka و Guido van Rossum در gh-100160.)
email: پارامتر isdst درemail.utils.localtime()منسوخ شد. (مشارکتشده توسط Alan Williams در gh-72346.)importlib.abcکلاسهای منسوخ:importlib.abc.ResourceReaderimportlib.abc.Traversableimportlib.abc.TraversableResources
بهجای آن از کلاسهای
importlib.resources.abcاستفاده کنید:(مشارکتشده توسط Jason R. Coombs و Hugo van Kemenade در gh-93963.)
ماژول
itertoolsپشتیبانی مستندنشده، ناکارآمد، دارای سابقهی اشکال و ناسازگار از عملیات کپی، کپی عمیق و پیکل داشت. این پشتیبانی در نسخهی 3.14 برای کاهش چشمگیر حجم کد و بار نگهداری حذف خواهد شد. (مشارکتشده توسط Raymond Hettinger در gh-101588.)multiprocessing: روش آغاز پیشفرض در لینوکس، BSDها و سایر پلتفرمهای POSIX غیر از macOS که در حال حاضر'fork'پیشفرض آنهاست، به روشی امنتر تغییر خواهد کرد (gh-84559). افزودن هشدار زمان اجرا دربارهی این موضوع بیش از حد مخل تلقی شد، زیرا انتظار نمیرود اکثر کدها به آن اهمیت بدهند. از APIهایget_context()یاset_start_method()استفاده کنید تا بهصراحت مشخص کنید که چه زمانی کد شما نیازمند'fork'است. به زمینهها و متدهای شروع مراجعه کنید.pathlib:is_relative_to()وrelative_to(): گذاشتن آرگومانهای اضافی منسوخ شده است.pkgutil:pkgutil.find_loader()وpkgutil.get_loader()اکنونDeprecationWarningرا مطرح میکنند؛ بهجای آن ازimportlib.util.find_spec()استفاده کنید. (مشارکتشده توسط نیکیتا سوبولف در gh-97850.)pty:master_open(): ازpty.openpty()استفاده کنید.slave_open(): ازpty.openpty()استفاده کنید.
-
versionوversion_info.execute()وexecutemany()اگر از جاینگهدارهای نامدار استفاده شود و parameters دنبالهای به جای یکdictباشد.
urllib:urllib.parse.Quoterمنسوخ شده است: قرار نبود که این کلاس یک API عمومی باشد. (مشارکتشده توسط Gregory P. Smith در gh-88168.)
در انتظار حذف در پایتون 3.15¶
سیستم ایمپورت:
تنظیم
__cached__روی یک ماژول بدون آنکه__spec__.cachedتنظیم شود، منسوخ شده است. در پایتون 3.15،__cached__دیگر توسط سیستم ایمپورت یا کتابخانه استاندارد تنظیم یا در نظر گرفته نخواهد شد. (gh-97879)تنظیم
__package__روی یک ماژول بدون تنظیم__spec__.parentمنسوخ شده است. در پایتون 3.15،__package__دیگر توسط سامانه ایمپورت یا کتابخانه استاندارد تنظیم یا در نظر گرفته نخواهد شد. (gh-97879)
-
تابع مستندسازینشدهی
ctypes.SetPointerType()از پایتون 3.13 منسوخ شده است.
-
کلاس
CGIHTTPRequestHandlerکه منسوخ است و بهندرت استفاده میشود، از پایتون 3.13 از رده خارج شده است. هیچ جایگزین مستقیمی وجود ندارد. برای اتصال یک وبسرور به هندلر درخواست، هر چیزی بهتر از CGI است.پرچم
--cgiدر رابط خط فرمان python -m http.server از پایتون 3.13 منسوخ شده است.
-
متد
load_module(): بهجای آن ازexec_module()استفاده کنید.
-
PurePath.is_reserved()از پایتون 3.13 منسوخ شده است. برای تشخیص مسیرهای رزروشده در ویندوز، ازos.path.isreserved()استفاده کنید.
-
java_ver()از پایتون 3.13 منسوخ شده است. این تابع تنها برای پشتیبانی از Jython مفید است، API گیجکنندهای دارد و عمدتاً آزموننشده است.
-
آرگومان check_home تابع
sysconfig.is_python_build()از پایتون 3.12 منسوخ شده است.
-
RLock()در پایتون 3.15 هیچ آرگومانی نخواهد گرفت. ارسال هر آرگومانی از پایتون 3.14 منسوخ شده است، زیرا پیادهسازی پایتونی هیچ آرگومانی را مجاز نمیداند، اما پیادهسازی C هر تعداد آرگومان جایگاهی یا کلیدواژهای را میپذیرد و همه آرگومانها را نادیده میگیرد.
-
types.CodeType: دسترسی بهco_lnotabمطابق PEP 626 از نسخهی 3.10 منسوخ شد و قرار بود در 3.12 حذف شود، اما تنها در 3.12 یکDeprecationWarningمناسب دریافت کرد. ممکن است در 3.15 حذف شود. (مشارکتشده توسط Nikita Sobolev در gh-101866.)
-
سینتکس مستندنشدهی آرگومان کلیدواژهای برای ایجاد کلاسهای
NamedTuple(برای مثال،Point = NamedTuple("Point", x=int, y=int)) از پایتون 3.13 منسوخ شده است. به جای آن از سینتکس مبتنی بر کلاس یا سینتکس تابعی استفاده کنید.هنگام استفاده از سینتکس تابعی
TypedDicts، ارسالنکردن مقدار به پارامتر fields (TD = TypedDict("TD")) یا ارسالNone(TD = TypedDict("TD", None)) از پایتون 3.13 منسوخ شده است. برای ایجاد یک TypedDict بدون هیچ فیلدی، ازclass TD(TypedDict): passیاTD = TypedDict("TD", {})استفاده کنید.تابع دکوراتور
@typing.no_type_check_decoratorاز پایتون 3.13 منسوخ شده است. پس از هشت سال حضور در ماژولtyping، هنوز هیچ بررسیگر نوع (type checker) بزرگی از آن پشتیبانی نکرده است.
wave:متدهای
getmark()،setmark()وgetmarkers()در کلاسهایWave_readوWave_writeاز پایتون 3.13 منسوخ شدهاند.
-
load_module()از پایتون 3.10 منسوخ شده است. به جای آن ازexec_module()استفاده کنید. (مشارکتشده توسط Jiahao Li در gh-125746.)
در انتظار حذف در پایتون 3.16¶
سیستم ایمپورت:
تنظیم
__loader__روی یک ماژول بدون تنظیم__spec__.loaderمنسوخ شده است. در پایتون 3.16،__loader__دیگر توسط سیستم ایمپورت یا کتابخانه استاندارد تنظیم نخواهد شد و مورد توجه قرار نخواهد گرفت.
-
کد قالب
'u'(wchar_t) از پایتون 3.3 در مستندات و از پایتون 3.13 در رانتایم منسوخ شده است. به جای آن، از کد قالب'w'(Py_UCS4) برای نویسههای یونیکد استفاده کنید.
-
asyncio.iscoroutinefunction()منسوخ شده است و در پایتون 3.16 حذف خواهد شد؛ به جای آن ازinspect.iscoroutinefunction()استفاده کنید. (مشارکتشده توسط جیاهاو لی و کومار آدیتیا در gh-122875.)سیستم سیاستهای
asyncioمنسوخ شده است و در پایتون 3.16 حذف خواهد شد. بهویژه، کلاسها و توابع زیر منسوخ شدهاند:کاربران باید برای استفاده از پیادهسازی حلقه رویداد موردنظر، از
asyncio.run()یاasyncio.Runnerبه همراه loop_factory استفاده کنند.به عنوان مثال، برای استفاده از
asyncio.SelectorEventLoopدر ویندوز:import asyncio async def main(): ... asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)
(با مشارکت Kumar Aditya در gh-127949.)
-
وارونسازی بیتی روی نوعهای بولی،
~Trueیا~False، از پایتون 3.12 منسوخ شده است، زیرا نتایج تعجبآور و خلاف شهود تولید میکند (-2و-1). برای نقیض منطقی یک مقدار بولی، بهجای آن ازnot xاستفاده کنید. در موارد نادر که به وارونسازی بیتی عدد صحیح زیرین نیاز دارید، آن را بهطور صریح بهintتبدیل کنید (~int(x)).
-
فراخوانی پیادهسازی پایتونِ
functools.reduce()با function یا sequence بهعنوان آرگومانهای کلیدواژهای، از پایتون 3.14 منسوخ شده است.
-
پشتیبانی از هندلرهای گزارشگیری سفارشی با آرگومان strm منسوخ شده و برای حذف در پایتون 3.16 برنامهریزی شده است. به جای آن، هندلرها را با آرگومان stream تعریف کنید. (مشارکتشده توسط Mariusz Felisiak در gh-115032.)
-
پسوندهای معتبر برای
mimetypes.MimeTypes.add_type()با '.' شروع میشوند یا خالی هستند. پسوندهای بدون نقطه منسوخ شدهاند و در پایتون 3.16 یکValueErrorایجاد خواهند کرد. (با مشارکت هوگو ون کمِناده در gh-75223.)
-
استثنای
ExecErrorاز پایتون 3.14 منسوخ شده است. این استثنا از پایتون 3.4 به بعد توسط هیچ تابعی درshutilاستفاده نشده است و اکنون مستعاری برایRuntimeErrorاست.
-
متد
Class.get_methodsاز پایتون 3.14 منسوخ شده است.
sys:تابع
_enablelegacywindowsfsencoding()از پایتون 3.13 منسوخ شده است. بهجای آن از متغیر محیطیPYTHONLEGACYWINDOWSFSENCODINGاستفاده کنید.
-
تابع
sysconfig.expand_makefile_vars()از پایتون 3.14 منسوخ شده است. به جای آن، از آرگومانvarsتابعsysconfig.get_paths()استفاده کنید.
-
ویژگی مستندنشده و استفادهنشدهی
TarFile.tarfileاز پایتون 3.13 منسوخ شده است.
در انتظار حذف در Python 3.17¶
-
collections.abc.ByteStringبرای حذف در پایتون 3.17 برنامهریزی شده است.برای آزمودن اینکه آیا
objپروتکل بافر را در رانتایم پیادهسازی میکند، ازisinstance(obj, collections.abc.Buffer)استفاده کنید. برای استفاده در حاشیهنویسی نوع، یا ازBufferاستفاده کنید یا از یک اجتماع (union) که صریحاً نوعهایی را که کد شما از آنها پشتیبانی میکند مشخص میکند (مثلاًbytes | bytearray | memoryview).ByteStringدر ابتدا قرار بود یک کلاس انتزاعی باشد که بهعنوان ابرینوع (supertype) هر دوbytesوbytearrayعمل کند. اما از آنجا که این کلاس پایه انتزاعی هرگز هیچ متدی نداشت، دانستن اینکه یک شیء نمونهای ازByteStringاست، در واقع هرگز چیز مفیدی دربارهی آن شیء به شما نمیگفت. سایر نوعهای رایج بافر مانندmemoryviewنیز هرگز بهعنوان زیرنوعهایی ازByteStringدر نظر گرفته نمیشدند (چه در زمان اجرا و چه توسط بررسیگرهای نوع ایستا).برای جزئیات بیشتر به PEP 688 مراجعه کنید. (مشارکتشده توسط شانتانو جین در gh-91896.)
-
پیش از پایتون 3.14، اجتماعهای سبک قدیمی (old-style unions) با استفاده از کلاس خصوصی
typing._UnionGenericAliasپیادهسازی میشدند. این کلاس دیگر برای پیادهسازی مورد نیاز نیست، اما برای سازگاری با نسخههای قبلی حفظ شده است و حذف آن برای پایتون 3.17 برنامهریزی شده است. کاربران باید بهجای اتکا به جزئیات پیادهسازی خصوصی، از ابزارهای کمکی مستندشدهی دروننگری مانندtyping.get_origin()وtyping.get_args()استفاده کنند.typing.ByteString، که از پایتون 3.9 منسوخ شده است، قرار است در پایتون 3.17 حذف شود.برای آزمودن اینکه آیا
objپروتکل بافر را در رانتایم پیادهسازی میکند، ازisinstance(obj, collections.abc.Buffer)استفاده کنید. برای استفاده در حاشیهنویسی نوع، یا ازBufferاستفاده کنید یا از یک اجتماع (union) که صریحاً نوعهایی را که کد شما از آنها پشتیبانی میکند مشخص میکند (مثلاًbytes | bytearray | memoryview).ByteStringدر ابتدا قرار بود یک کلاس انتزاعی باشد که بهعنوان ابرینوع (supertype) هر دوbytesوbytearrayعمل کند. اما از آنجا که این کلاس پایه انتزاعی هرگز هیچ متدی نداشت، دانستن اینکه یک شیء نمونهای ازByteStringاست، در واقع هرگز چیز مفیدی دربارهی آن شیء به شما نمیگفت. سایر نوعهای رایج بافر مانندmemoryviewنیز هرگز بهعنوان زیرنوعهایی ازByteStringدر نظر گرفته نمیشدند (چه در زمان اجرا و چه توسط بررسیگرهای نوع ایستا).برای جزئیات بیشتر به PEP 688 مراجعه کنید. (مشارکتشده توسط شانتانو جین در gh-91896.)
در انتظار حذف در نسخههای آینده¶
APIهای زیر در آینده حذف خواهند شد، هرچند در حال حاضر تاریخی برای حذف آنها تعیین نشده است.
-
تودرتو کردن گروههای آرگومان و تودرتو کردن گروههای انحصاری متقابل منسوخ شدهاند.
ارسال آرگومان کلیدواژهای مستندنشده prefix_chars به
add_argument_group()اکنون منسوخ شده است.مبدل نوع
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)پشتیبانی از متدهای
__index__()و__int__()که نوعی غیر از 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()استفاده کنید.-
utcnow(): ازdatetime.datetime.now(tz=datetime.UTC)استفاده کنید.utcfromtimestamp(): ازdatetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)استفاده کنید.
gettext: مقدار صیغه جمع باید یک عدد صحیح باشد.-
پارامتر debug_override در
cache_from_source()منسوخ شده است: به جای آن از پارامتر optimization استفاده کنید.
-
رابط تاپل
EntryPoints.Noneضمنی در مقادیر بازگشتی.
logging: متدwarn()از پایتون 3.3 منسوخ شده است؛ بهجای آن ازwarning()استفاده کنید.mailbox: استفاده از ورودی StringIO و حالت متنی منسوخ شده است؛ به جای آن از BytesIO و حالت دودویی استفاده کنید.os: فراخوانیos.register_at_fork()در فرایند چندنخی.pydoc.ErrorDuringImport: مقدار تاپل برای پارامتر exc_info منسوخ شده است؛ از یک نمونه استثنا استفاده کنید.re: اکنون قواعد سختگیرانهتری برای ارجاعهای عددی گروه و نامهای گروه در عبارات باقاعده اعمال میشوند. از این پس فقط دنبالهای از ارقام اسکی بهعنوان ارجاع عددی پذیرفته میشود. نام گروه در الگوهای bytes و رشتههای جایگزینی اکنون فقط میتواند شامل حروف و ارقام اسکی و خط زیر باشد. (مشارکتشده توسط Serhiy Storchaka در gh-91760.)ماژولهای
sre_compile،sre_constantsوsre_parse.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_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(): از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استفاده نمیشود. برای حفظ سازگاری با کاربرانی که از این کلاس خصوصی استفاده میکنند، یک لایه سازگاری (shim) تا دستکم پایتون 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()نباید نوشتن جزئی انجام دهد.xml.etree.ElementTree: آزمودن مقدار درستی یکElementمنسوخ شده است. در یک نسخهی آینده همیشهTrueبرگردانده خواهد شد. بهجای آن، آزمونهای صریحlen(elem)یاelem is not Noneرا ترجیح دهید.sys._clear_type_cache()منسوخ شده است: به جای آن ازsys._clear_internal_caches()استفاده کنید.
حذفشده¶
asynchat و asyncore¶
configparser¶
چندین نام که در
configparserاز همان نسخه 3.2 منسوخ شده بودند، طبق gh-89336 حذف شدهاند:configparser.ParsingErrorدیگر ویژگی یا آرگومانfilenameندارد. بهجای آن، از ویژگی و آرگومانsourceاستفاده کنید.configparserدیگر کلاسSafeConfigParserندارد. به جای آن از نام کوتاهترConfigParserاستفاده کنید.configparser.ConfigParserدیگر متدreadfpرا ندارد. به جای آن ازread_file()استفاده کنید.
distutils¶
بستهی
distutilsحذف شد. این بسته در پایتون 3.10 بر اساس PEP 632 «منسوخسازی ماژول distutils» منسوخ شده بود. برای پروژههایی که هنوز ازdistutilsاستفاده میکنند و نمیتوان آنها را به چیز دیگری بهروزرسانی کرد، میتوان پروژهیsetuptoolsرا نصب کرد: این پروژه همچنانdistutilsرا فراهم میکند. (مشارکتشده توسط Victor Stinner در gh-92584.)
ensurepip¶
حذف ویل (wheel) همراه setuptools از
ensurepip، و توقف نصب setuptools در محیطهایی که توسطvenvایجاد میشوند.pip (>= 22.1)نیازی به نصب setuptools در محیط ندارد. بستههای مبتنی برsetuptools(و مبتنی برdistutils) همچنان باpip installقابل استفاده هستند، زیرا pipsetuptoolsرا در محیط ساخت مورد استفاده برای ساخت یک بسته فراهم میکند.easy_install،pkg_resources،setuptoolsوdistutilsدیگر بهصورت پیشفرض در محیطهایی که باvenvایجاد شدهاند یا باensurepipبوتاسترپ شدهاند ارائه نمیشوند، زیرا آنها بخشی از بستهیsetuptoolsهستند. برای پروژههایی که در رانتایم به این موارد تکیه میکنند، پروژهیsetuptoolsباید بهعنوان یک وابستگی اعلام شود و بهصورت جداگانه (معمولاً با استفاده از pip) نصب شود.(با مشارکت Pradyun Gedam در gh-95299.)
enum¶
ftplib¶
gzip¶
ویژگی
filenameاز کلاسgzip.GzipFileدر ماژولgzipکه از پایتون 2.6 منسوخ شده بود، حذف شد؛ بهجای آن از ویژگیnameاستفاده کنید. در حالت نوشتن، ویژگیfilenameپسوند پروندهی'.gz'را در صورت نبودن اضافه میکرد. (مشارکتشده توسط Victor Stinner در gh-94196.)
hashlib¶
پیادهسازی خالص پایتونِ
hashlib.pbkdf2_hmac()درhashlib، که در پایتون 3.10 منسوخ شده بود، حذف شد. پایتون 3.10 و جدیدتر به OpenSSL 1.1.1 نیاز دارد (PEP 644): این نسخه از OpenSSL یک پیادهسازی C برایpbkdf2_hmac()فراهم میکند که سریعتر است. (مشارکت Victor Stinner در gh-94199.)
importlib¶
بسیاری از پاکسازیهای پیشتر منسوخشده در
importlibاکنون تکمیل شدهاند:ارجاعها به
module_repr()و پشتیبانی از آن حذف شدهاند. (مشارکتشده توسط Barry Warsaw در gh-97850.)importlib.util.set_package،importlib.util.set_loaderوimportlib.util.module_for_loaderهمگی حذف شدهاند. (مشارکتشده توسط Brett Cannon و Nikita Sobolev در gh-65961 و gh-97850.)پشتیبانی از APIهای
find_loader()وfind_module()حذف شده است. (مشارکتشده توسط Barry Warsaw در gh-98040.)importlib.abc.Finder،pkgutil.ImpImporterوpkgutil.ImpLoaderحذف شدهاند. (مشارکتشده توسط Barry Warsaw در gh-98040.)
imp¶
ماژول
impحذف شده است. (مشارکتشده توسط Barry Warsaw در gh-98040.)برای مهاجرت، به جدول تناظر زیر مراجعه کنید:
imp
importlib
imp.NullImporterNoneرا درsys.path_importer_cacheدرج کنیدimp.cache_from_source()imp.find_module()imp.get_magic()imp.get_suffixes()importlib.machinery.SOURCE_SUFFIXES،importlib.machinery.EXTENSION_SUFFIXESوimportlib.machinery.BYTECODE_SUFFIXESimp.get_tag()imp.load_module()imp.new_module(name)types.ModuleType(name)imp.reload()imp.source_from_cache()imp.load_source()به ادامه مراجعه کنید
imp.load_source()را با این جایگزین کنید:import importlib.util import importlib.machinery def load_source(modname, filename): loader = importlib.machinery.SourceFileLoader(modname, filename) spec = importlib.util.spec_from_file_location(modname, filename, loader=loader) module = importlib.util.module_from_spec(spec) # The module is always executed and not cached in sys.modules. # Uncomment the following line to cache the module. # sys.modules[module.__name__] = module loader.exec_module(module) return module
حذف توابع و ویژگیهای
impبدون جایگزین:توابع بدون مستندات:
imp.init_builtin()imp.load_compiled()imp.load_dynamic()imp.load_package()
imp.lock_held()،imp.acquire_lock()،imp.release_lock(): طرحوارهی قفلبندی در پایتون 3.3 به قفلهای بهازای هر ماژول تغییر کرده است.ثابتهای
imp.find_module():SEARCH_ERROR،PY_SOURCE،PY_COMPILED،C_EXTENSION،PY_RESOURCE،PKG_DIRECTORY،C_BUILTIN،PY_FROZEN،PY_CODERESOURCE،IMP_HOOK.
io¶
locale¶
تابع
locale.format()ماژولlocaleکه در پایتون 3.7 منسوخ شده بود، حذف شد؛ بهجای آن ازlocale.format_string()استفاده کنید. (مشارکتشده توسط Victor Stinner در gh-94226.)
smtpd¶
sqlite3¶
ویژگیهای مستندنشدهی
sqlite3زیر که در پایتون 3.10 منسوخ شده بودند، اکنون حذف شدهاند:sqlite3.enable_shared_cache()sqlite3.OptimizedUnicode
اگر باید از نهانگاه اشتراکی استفاده شود، پایگاه داده را در حالت URI با استفاده از پارامتر پرسوجوی
cache=sharedباز کنید.کارخانهی متن (text factory)
sqlite3.OptimizedUnicodeاز پایتون 3.3 به بعد مستعاری برایstrبوده است. کدی که پیشتر کارخانهی متن را رویOptimizedUnicodeتنظیم میکرد، میتواند یا بهطور صریح ازstrاستفاده کند، یا بر مقدار پیشفرض تکیه کند که آن همstrاست.(مشارکتشده توسط Erlend E. Aasland در gh-92548.)
ssl¶
تابع
ssl.RAND_pseudo_bytes()ماژولsslکه در پایتون 3.6 منسوخ شده بود، حذف شد؛ بهجای آن ازos.urandom()یاssl.RAND_bytes()استفاده کنید. (مشارکتشده توسط Victor Stinner در gh-94199.)تابع
ssl.match_hostname()حذف شد. این تابع در پایتون 3.7 منسوخ شده بود. از پایتون 3.7، OpenSSL تطبیق نام میزبان را انجام میدهد و پایتون دیگر از تابعssl.match_hostname()استفاده نمیکند. (مشارکتشده توسط ویکتور استینر در gh-94199.)تابع
ssl.wrap_socket()که در Python 3.7 منسوخ شده بود، حذف شد: بهجای آن، یک شیءssl.SSLContextایجاد کنید و متدssl.SSLContext.wrap_socketآن را فراخوانی کنید. هر بستهای که هنوز ازssl.wrap_socket()استفاده میکند، خراب و ناامن است. این تابع نه افزونه SNI در TLS را ارسال میکند و نه نام میزبان سرور را اعتبارسنجی میکند. کد مشمول CWE 295 (اعتبارسنجی نادرست گواهی) است. (مشارکتشده توسط Victor Stinner در gh-94199.)
unittest¶
حذف بسیاری از قابلیتهای مدتها منسوخشدهی
unittest:تعدادی از نامهای مستعار متدهای
TestCase:نام مستعار منسوخ
نام متد
منسوخ در
failUnless3.1
failIf3.1
failUnlessEqual3.1
failIfEqual3.1
failUnlessAlmostEqual3.1
failIfAlmostEqual3.1
failUnlessRaises3.1
assert_3.2
assertEquals3.2
assertNotEquals3.2
assertAlmostEquals3.2
assertNotAlmostEquals3.2
assertRegexpMatches3.2
assertRaisesRegexp3.2
assertNotRegexpMatches3.5
میتوانید برای مدرنسازی خودکار آزمونهای واحد خود از https://github.com/isidentical/teyit استفاده کنید.
متد مستندنشده و معیوب
assertDictContainsSubsetازTestCase(در پایتون 3.2 منسوخ شده).پارامتر مستندسازینشدهی use_load_tests در
TestLoader.loadTestsFromModule(منسوخ و نادیده گرفتهشده از پایتون 3.5).نام مستعاری برای کلاس
TextTestResult:_TextTestResult(در پایتون 3.2 منسوخ شده است).
(مشارکتشده توسط Serhiy Storchaka در gh-89325.)
webbrowser¶
پشتیبانی از مرورگرهای منسوخ از
webbrowserحذف شد. مرورگرهای حذفشده عبارتاند از: Grail، Mosaic، Netscape، Galeon، Skipstone، Iceape، Firebird و نسخههای 35 و پایینتر Firefox (gh-102871).
xml.etree.ElementTree¶
متد
ElementTree.Element.copy()از پیادهسازی خالص پایتون، که در پایتون 3.10 منسوخ شده بود، حذف شد؛ بهجای آن از تابعcopy.copy()استفاده کنید. پیادهسازی C ازxml.etree.ElementTreeمتدcopy()ندارد و فقط متد__copy__()دارد. (مشارکتشده توسط Victor Stinner در gh-94383.)
zipimport¶
موارد دیگر¶
قاعدهی
suspiciousازMakefileمستندات وDoc/tools/rstlint.pyحذف شد، هر دو به نفع sphinx-lint. (مشارکتشده توسط Julien Palard در gh-98179.)پارامترهای keyfile و certfile از ماژولهای
ftplib،imaplib،poplibوsmtplibو همچنین پارامترهای key_file، cert_file و check_hostname از ماژولhttp.clientحذف شدند که همگی از پایتون 3.6 منسوخ شده بودند. بهجای آنها از پارامتر context (ssl_context درimaplib) استفاده کنید. (مشارکتکننده: Victor Stinner در gh-94172.)هکهای سازگاری
Jythonاز چندین ماژول و آزمون کتابخانه استاندارد حذف شدند. (مشارکتشده توسط نیکیتا سوبولف در gh-99482.)حذف پرچم
_use_broken_old_ctypes_structure_semantics_از ماژولctypes. (مشارکتشده توسط Nikita Sobolev در gh-99285.)
انتقال به پایتون 3.12¶
در این بخش، تغییراتی که پیشتر توضیح داده شدهاند و سایر رفع اشکالهایی که ممکن است نیازمند تغییراتی در کد شما باشند، فهرست شدهاند.
تغییرات در API پایتون¶
اکنون قواعد سختگیرانهتری برای ارجاعهای عددی به گروهها و نامهای گروه در عبارات باقاعده اعمال میشود. اکنون فقط دنبالهای از ارقام اسکی بهعنوان ارجاع عددی پذیرفته میشود. نام گروه در الگوهای بایتی و رشتههای جایگزینی اکنون فقط میتواند شامل حروف و ارقام اسکی و زیرخط باشد. (مشارکتشده توسط سرهی استورچاکا در gh-91760.)
قابلیت
randrange()که از پایتون 3.10 منسوخ شده بود، حذف شد. پیشتر،randrange(10.0)بدون اتلاف بهrandrange(10)تبدیل میشد. اکنون، استثنایTypeErrorایجاد میشود. علاوه بر این، استثنایی که برای مقادیر غیرصحیح مانندrandrange(10.5)یاrandrange('10')ایجاد میشد، ازValueErrorبهTypeErrorتغییر کرده است. این تغییر همچنین از اشکالاتی جلوگیری میکند که در آنهاrandrange(1e25)بهصورت بیصدا از بازهای بزرگتر از بازهیrandrange(10**25)انتخاب میکرد. (در ابتدا توسط Serhiy Storchaka پیشنهاد شد gh-86388.)argparse.ArgumentParserهنگام خواندن آرگومانها از پرونده (مثلاً گزینهیfromfile_prefix_chars)، کدگذاری و هندلر خطا را از کدگذاری متن پیشفرض (مثلاًlocale.getpreferredencoding(False)) به filesystem encoding and error handler تغییر داد. در ویندوز، پروندههای آرگومان باید بهجای کدپیج ANSI با UTF-8 کدگذاری شوند.ماژول
smtpdمبتنی برasyncoreکه در پایتون 3.4.7 و 3.5.4 منسوخ شده بود، حذف شد. جایگزین توصیهشده، ماژول aiosmtpd مبتنی برasyncioدر PyPI است.shlex.split(): ارسالNoneبرای آرگومان s اکنون بهجای خواندنsys.stdin، استثنا ایجاد میکند. این قابلیت در Python 3.9 منسوخ شده بود. (مشارکتشده توسط Victor Stinner در gh-94352.)ماژول
osدیگر مسیرهای شبهبایت مانند نوعهایbytearrayوmemoryviewرا نمیپذیرد: برای رشتههای بایتی، فقط نوع دقیقbytesپذیرفته میشود. (مشارکت Victor Stinner در gh-98393.)syslog.openlog()وsyslog.closelog()اکنون در صورت استفاده در زیرمفسرها شکست میخورند. ازsyslog.syslog()هنوز هم میتوان در زیرمفسرها استفاده کرد، اما اکنون تنها در صورتی کهsyslog.openlog()پیشتر در مفسر اصلی فراخوانی شده باشد. این محدودیتهای جدید بر مفسر اصلی اعمال نمیشوند، بنابراین تنها گروه بسیار کوچکی از کاربران ممکن است تحت تأثیر قرار گیرند. این تغییر به جداسازی مفسر کمک میکند. علاوه بر این،syslogپوششی حول منابع سراسری در سطح فرایند است که بهتر است از مفسر اصلی مدیریت شوند. (مشارکتشده توسط Donghee Na در gh-99127.)رفتار قفلگذاری مستندنشدهی
@~functools.cached_propertyحذف شده است، زیرا قفل آن میان همهی نمونههای کلاس مشترک بود و به رقابت شدید بر سر قفل (lock contention) منجر میشد. این بدان معناست که تابع getter یک پراپرتی نهانگاهی، اکنون ممکن است برای یک نمونهی واحد بیش از یک بار اجرا شود، اگر دو نخ با هم رقابت کنند. برای اکثر پراپرتیهای نهانگاهی ساده (مثلاً پراپرتیهایی که همتوان هستند و صرفاً مقداری را بر اساس ویژگیهای دیگر نمونه محاسبه میکنند) این مشکلی نخواهد داشت. اگر همگامسازی لازم باشد، قفلگذاری را درون تابع getter پراپرتی نهانگاهی یا در اطراف نقاط دسترسی چندنخی پیادهسازی کنید.sys._current_exceptions()اکنون نگاشتی از شناسهی نخ به نمونهای از استثنا برمیگرداند، نه به تاپل(typ, exc, tb). (مشارکت Irit Katriel در gh-103176.)هنگام استخراج پروندههای tar با استفاده از
tarfileیاshutil.unpack_archive()، آرگومان filter را برای محدود کردن قابلیتهایی که ممکن است غافلگیرکننده یا خطرناک باشند ارسال کنید. برای جزئیات به فیلترهای استخراج مراجعه کنید.خروجی توابع
tokenize.tokenize()وtokenize.generate_tokens()اکنون به دلیل تغییرات معرفیشده در PEP 701 تغییر کرده است. این بدان معناست که توکنهایSTRINGدیگر برای افاسترینگها تولید نمیشوند و در عوض، توکنهای توصیفشده در PEP 701 اکنون تولید میشوند: توکنهایFSTRING_START،FSTRING_MIDDLEوFSTRING_ENDاکنون برای بخشهای «رشتهای» افاسترینگ، در کنار توکنهای مناسب برای توکنسازی در اجزای عبارت، تولید میشوند. برای مثال، نسخهی قدیمی توکنساز برای افاسترینگf"start {1+1} end"این توکنها را تولید میکرد:1,0-1,18: STRING 'f"start {1+1} end"'
در حالی که نسخه جدید تولید میکند:
1,0-1,2: FSTRING_START 'f"' 1,2-1,8: FSTRING_MIDDLE 'start ' 1,8-1,9: OP '{' 1,9-1,10: NUMBER '1' 1,10-1,11: OP '+' 1,11-1,12: NUMBER '1' 1,12-1,13: OP '}' 1,13-1,17: FSTRING_MIDDLE ' end' 1,17-1,18: FSTRING_END '"'
علاوه بر این، ممکن است در نتیجهی تغییرات مورد نیاز برای پشتیبانی از PEP 701، برخی تغییرات رفتاری جزئی رخ دهد. برخی از این تغییرات عبارتاند از:
ویژگی
typeتوکنهایی که هنگام توکنسازی برخی نویسههای نامعتبر پایتون مانند!تولید میشوند، ازERRORTOKENبهOPتغییر کرده است.رشتههای تکسطری ناقص نیز اکنون مانند رشتههای چندسطری ناقص، استثنای
tokenize.TokenErrorرا ایجاد میکنند.برخی از کدهای ناقص یا نامعتبر پایتون اکنون هنگام توکنسازی، بهجای بازگرداندن توکنهای
ERRORTOKENدلخواه،tokenize.TokenErrorایجاد میکنند.ترکیب تب و فاصله بهعنوان تورفتگی در یک پرونده دیگر پشتیبانی نمیشود و استثنای
TabErrorایجاد میکند.
ماژول
threadingاکنون انتظار دارد که ماژول_threadدارای ویژگی_is_main_interpreterباشد. این تابعی بدون آرگومان است که اگر مفسر فعلی، مفسر اصلی باشد،Trueبرمیگرداند.هر کتابخانه یا برنامهای که ماژول
_threadسفارشی ارائه میدهد، باید_is_main_interpreter()را نیز فراهم کند. (نگاه کنید به gh-112826.)
تغییرات ساخت¶
پایتون دیگر از
setup.pyبرای ساخت ماژولهای توسعهای مشترک C استفاده نمیکند. پارامترهای ساخت مانند سرآیندها و کتابخانهها در اسکریپتconfigureتشخیص داده میشوند. ماژولهای توسعهای توسطMakefileساخته میشوند. اغلب ماژولهای توسعهای ازpkg-configاستفاده میکنند و به تشخیص دستی بازمیگردند. (مشارکت Christian Heimes در gh-93939.)va_start()با دو پارامتر، مانندva_start(args, format),اکنون برای ساخت پایتون لازم است.va_start()دیگر با یک پارامتر فراخوانی نمیشود. (مشارکت Kumar Aditya در gh-93207.)سیپایتون اکنون در صورتی که کامپایلر Clang این پرچم را بپذیرد، از گزینهی ThinLTO بهعنوان سیاست پیشفرض بهینهسازی زمان پیوند استفاده میکند. (مشارکتشده توسط Donghee Na در gh-89536.)
متغیر
COMPILEALL_OPTSبهMakefileاضافه شد تا گزینههایcompileall(پیشفرض:-j0) درmake installبازنویسی شوند. همچنین ۳ دستورcompileallدر یک دستور واحد ادغام شدند تا پروندههای .pyc برای همهی سطوح بهینهسازی (0, 1, 2) یکجا ساخته شوند. (مشارکتشده توسط Victor Stinner در gh-99289.)افزودن سهتاییهای سکو (platform triplets) برای LoongArch ۶۴-بیتی:
loongarch64-linux-gnusf
loongarch64-linux-gnuf32
loongarch64-linux-gnu
(مشارکتشده توسط Zhang Na در gh-90656.)
PYTHON_FOR_REGENاکنون به پایتون 3.10 یا جدیدتر نیاز دارد.اکنون برای بازتولید
configureبه Autoconf 2.71 و aclocal 1.16.4 نیاز است. (مشارکتشده توسط Christian Heimes در gh-89886.)ساختهای ویندوز و نصبکنندههای macOS از python.org اکنون از OpenSSL 3.0 استفاده میکنند.
تغییرات C API¶
قابلیتهای جدید¶
PEP 697: معرفی سطح ناپایدار API زبان C که برای ابزارهای سطح پایین مانند اشکالزداها و کامپایلرهای JIT در نظر گرفتهشده است. این API ممکن است در هر نسخهی فرعی سیپایتون بدون هشدارهای منسوخسازی تغییر کند. محتویات آن با پیشوند
PyUnstable_در نامها مشخص میشوند.سازندههای شیء کد:
PyUnstable_Code_New()(تغییرنامیافته ازPyCode_New)PyUnstable_Code_NewWithPosOnlyArgs()(تغییرنامیافته ازPyCode_NewWithPosOnlyArgs)
فضای ذخیرهسازی اضافی برای شیءهای کد (PEP 523):
PyUnstable_Eval_RequestCodeExtraIndex()(تغییرنامیافته از_PyEval_RequestCodeExtraIndex)PyUnstable_Code_GetExtra()(تغییرنامیافته از_PyCode_GetExtra)PyUnstable_Code_SetExtra()(که از_PyCode_SetExtraتغییر نام یافته است)
نامهای اصلی تا زمانی که API مربوطه تغییر کند، همچنان در دسترس خواهند بود.
(مشارکت Petr Viktorin در gh-101101.)
PEP 697: افزودن یک API برای توسعه دادن نوعهایی که چیدمان حافظهی نمونههایشان مات است:
PyType_Spec.basicsizeمیتواند صفر یا منفی باشد تا به ارث بردن یا گسترش دادن اندازه کلاس پایه را مشخص کند.PyObject_GetTypeData()وPyType_GetTypeDataSize()برای امکان دسترسی به دادههای نمونهی مخصوص زیرکلاس افزوده شدند.Py_TPFLAGS_ITEMS_AT_ENDوPyObject_GetItemData()افزوده شدند تا امکان گسترش ایمن برخی نوعهای با اندازهی متغیر، از جملهPyType_Type، فراهم شود.Py_RELATIVE_OFFSETاضافه شد تا بتواناعضارا بر اساس ساختاری مخصوص زیرکلاس تعریف کرد.
(مشارکتشده توسط پتر ویکتورین در gh-103509.)
تابع جدید C API محدود
PyType_FromMetaclass()اضافه شد که تابع موجودPyType_FromModuleAndSpec()را با استفاده از یک آرگومان فراکلاس اضافی تعمیم میدهد. (با مشارکت Wenzel Jakob در gh-93012.)API برای ایجاد اشیایی که میتوان با استفاده از پروتکل vectorcall آنها را فراخوانی کرد، به API محدود اضافه شد:
اکنون هنگامی که متد
__call__()کلاس دوباره انتساب داده میشود، پرچمPy_TPFLAGS_HAVE_VECTORCALLاز کلاس حذف میشود. این کار استفاده از vectorcall را با نوعهای تغییرپذیر ایمن میسازد (یعنی نوعهای هیپ بدون پرچم تغییرناپذیری،Py_TPFLAGS_IMMUTABLETYPE). نوعهای تغییرپذیری کهtp_callرا بازنویسی نمیکنند، اکنون پرچمPy_TPFLAGS_HAVE_VECTORCALLرا به ارث میبرند. (مشارکتشده توسط Petr Viktorin در gh-93274.)پرچمهای
Py_TPFLAGS_MANAGED_DICTوPy_TPFLAGS_MANAGED_WEAKREFافزوده شدهاند. این امر به کلاسهای توسعهای امکان میدهد تا با دفترداری کمتر، مصرف حافظه کمتر و دسترسی سریعتر، از__dict__شیء و ارجاعهای ضعیف پشتیبانی کنند.API برای انجام فراخوانیها با استفاده از پروتکل vectorcall به API محدود اضافه شد:
این بدان معناست که هر دو سمت ورودی و خروجی پروتکل فراخوانی برداری (vector call) اکنون در API محدود در دسترس هستند. (با مشارکت Wenzel Jakob در gh-98586.)
دو تابع عمومی جدید،
PyEval_SetProfileAllThreads()وPyEval_SetTraceAllThreads()، اضافه شدند که اجازه میدهند توابع ردگیری و پروفایلگیری در همهی نخهای در حال اجرا، علاوه بر نخ فراخواننده، تنظیم شوند. (مشارکتشده توسط Pablo Galindo در gh-93503.)افزودن تابع جدید
PyFunction_SetVectorcall()به API زبان C که فیلد vectorcall یکPyFunctionObjectدادهشده را تنظیم میکند. (مشارکتشده توسط Andrew Frost در gh-92257.)API زبان C اکنون اجازه میدهد تا از طریق
PyDict_AddWatcher()،PyDict_Watch()و APIهای مرتبط، کالبکهایی ثبت شوند که هرگاه یک دیکشنری تغییر داده شود، فراخوانی میشوند. این قابلیت برای استفاده توسط مفسرهای بهینهساز، کامپایلرهای JIT یا اشکالزداها در نظر گرفته شده است. (مشارکتشده توسط کارل مایر در gh-91052.)افزودن APIهای
PyType_AddWatcher()وPyType_Watch()برای ثبت کردن کالبکها بهمنظور دریافت اطلاعرسانی هنگام تغییر یک نوع. (مشارکتشده توسط کارل مایر در gh-91051.)افزودن APIهای
PyCode_AddWatcher()وPyCode_ClearWatcher()برای ثبت کالبکهایی که هنگام ایجاد و نابودی اشیاء کد اطلاعرسانی دریافت میکنند. (با مشارکت Itamar Oren در gh-91054.)افزودن توابع
PyFrame_GetVar()وPyFrame_GetVarString()برای گرفتن متغیر فریم بر اساس نام آن. (مشارکتشده توسط Victor Stinner در gh-91248.)توابع
PyErr_GetRaisedException()وPyErr_SetRaisedException()برای ذخیره و بازیابی استثنای فعلی اضافه شدند. این توابع بهجای سه آرگومان توابع اکنون منسوخشدهیPyErr_Fetch()وPyErr_Restore()، تنها یک شیء استثنا را برمیگردانند و میپذیرند. این کار کمتر مستعد خطا و کمی کارآمدتر است. (مشارکت Mark Shannon در gh-101578.)_PyErr_ChainExceptions1که یک نمونهی استثنا دریافت میکند اضافه شد تا جایگزین_PyErr_ChainExceptionsدر API قدیمی شود که اکنون منسوخ شده است. (مشارکت Mark Shannon در gh-101578.)توابع
PyException_GetArgs()وPyException_SetArgs()بهعنوان توابعی راحت برای بازیابی و تغییرargsکه به سازندهی استثنا پاس داده میشود، اضافه شدند. (مشارکت Mark Shannon در gh-101578.)افزودن
PyErr_DisplayException()که یک نمونه استثنا میگیرد، برای جایگزینیPyErr_Display()مربوط به API قدیمی. (مشارکت از طرف ایریت کاتریل در gh-102755).
PEP 683: معرفی اشیاء نامیرا، که به اشیاء اجازه میدهد شمارش ارجاع را دور بزنند، و تغییرات مرتبط با C-API:
_Py_IMMORTAL_REFCNT: شمارش ارجاعی که یک شیء را تعریف میکندبهعنوان نامیرا.
_Py_IsImmortalبررسی میکند که آیا یک شیء دارای شمارش ارجاع نامیرا است یا خیر.PyObject_HEAD_INITاکنون شمارش ارجاع را مقداردهی اولیه میکند به_Py_IMMORTAL_REFCNTهنگامی که همراه باPy_BUILD_COREاستفاده شود.
SSTATE_INTERNED_IMMORTALشناسهای برای اشیاء یونیکد درونیسازیشدهکه نامیرا هستند.
SSTATE_INTERNED_IMMORTAL_STATICشناسهای برای یونیکد درونیسازیشدهاشیایی که نامیرا و ایستا هستند
sys.getunicodeinternedsizeاین تعداد کل یونیکد را برمیگردانداشیایی که درونسازی (intern) شدهاند. این امر اکنون لازم است تا
refleak.pyبتواند شمارش ارجاع و بلوکهای تخصیصیافته را بهدرستی پیگیری کند
(مشارکتشده توسط Eddie Elizondo در gh-84436.)
PEP 684: افزودن تابع جدید
Py_NewInterpreterFromConfig()وPyInterpreterConfigکه میتوان از آنها برای ایجاد زیرمفسرهایی با قفلهای مفسر سراسری اختصاصی خودشان استفاده کرد. (برای اطلاعات بیشتر به PEP 684: قفل مفسر سراسری به ازای هر مفسر مراجعه کنید.) (مشارکتشده توسط Eric Snow در gh-104110.)در نسخهی 3.12 از C API محدود، توابع
Py_INCREF()وPy_DECREF()اکنون بهصورت فراخوانیهای تابع مات پیادهسازی شدهاند تا جزئیات پیادهسازی را پنهان کنند. (مشارکتشده توسط Victor Stinner در gh-105387.)
انتقال به پایتون 3.12¶
APIهای قدیمی یونیکد مبتنی بر نمایش
Py_UNICODE*حذف شدهاند. لطفاً به APIهای مبتنی بر UTF-8 یاwchar_t*مهاجرت کنید.توابع تجزیهی آرگومان مانند
PyArg_ParseTuple()دیگر از قالبهای مبتنی برPy_UNICODE*(مانندuوZ) پشتیبانی نمیکنند. لطفاً به قالبهای دیگر یونیکد مانندs،z،esوUمهاجرت کنید.مقدار
tp_weaklistبرای همهی نوعهای توکار ایستا همیشهNULLاست. این یک فیلد صرفاً داخلی درPyTypeObjectاست، اما به این تغییر اشاره میکنیم چرا که ممکن است کسی به هر حال مستقیماً به این فیلد دسترسی داشته باشد. برای جلوگیری از خرابی، به جای آن استفاده از C-API عمومی موجود را در نظر بگیرید، یا در صورت نیاز، از ماکرو (صرفاً داخلی)_PyObject_GET_WEAKREFS_LISTPTR()استفاده کنید.این
PyTypeObject.tp_subclassesکه صرفاً داخلی است، ممکن است اکنون اشارهگر شیء معتبری نباشد. نوع آن برای بازتاب این موضوع به void* تغییر یافت. این را برای حالتی ذکر میکنیم که کسی اتفاقاً مستقیماً به این فیلد صرفاً داخلی دسترسی داشته باشد.برای بهدستآوردن فهرستی از زیرکلاسها، متد پایتونی
__subclasses__()را فراخوانی کنید (برای مثال با استفاده ازPyObject_CallMethod()).افزودن پشتیبانی از گزینههای قالببندی بیشتر (چپچین کردن، مبنای هشت، مبنای شانزده با حروف بزرگ، رشتههای C از نوع
intmax_t،ptrdiff_tوwchar_t، عرض و دقت متغیر) درPyUnicode_FromFormat()وPyUnicode_FromFormatV(). (مشارکت Serhiy Storchaka در gh-98836.)نویسه قالب ناشناخته در
PyUnicode_FromFormat()وPyUnicode_FromFormatV()اکنون یکSystemErrorبرپا میکند. در نسخههای قبلی، این نویسه باعث میشد تمام باقیماندهی رشته قالب عیناً به رشته نتیجه کپی شود و هر آرگومان اضافی دور ریخته شود. (مشارکتشده توسط Serhiy Storchaka در gh-95781.)اصلاح جایگذاری نادرست علامت در
PyUnicode_FromFormat()وPyUnicode_FromFormatV(). (ارائهشده توسط Philip Georgi در gh-95504.)کلاسهای توسعهای که میخواهند جایگاه
__dict__یا ارجاع ضعیف اضافه کنند، باید بهترتیب بهجایtp_dictoffsetوtp_weaklistoffsetازPy_TPFLAGS_MANAGED_DICTوPy_TPFLAGS_MANAGED_WEAKREFاستفاده کنند. استفاده ازtp_dictoffsetوtp_weaklistoffsetهمچنان پشتیبانی میشود، اما از وراثت چندگانه بهطور کامل پشتیبانی نمیکند (gh-95589) و ممکن است کارایی بدتر باشد. کلاسهایی کهPy_TPFLAGS_MANAGED_DICTرا اعلام میکنند، باید برای پیمایش و پاکسازی دیکشنریهای نمونههای خود،_PyObject_VisitManagedDict()و_PyObject_ClearManagedDict()را فراخوانی کنند. برای پاکسازی ارجاعهای ضعیف، مانند قبلPyObject_ClearWeakRefs()را فراخوانی کنید.تابع
PyUnicode_FSDecoder()دیگر مسیرهای شبهبایت مانند نوعهایbytearrayوmemoryviewرا نمیپذیرد: برای رشتههای بایتی، فقط نوع دقیقbytesپذیرفته میشود. (مشارکتشده توسط Victor Stinner در gh-98393.)ماکروهای
Py_CLEAR،Py_SETREFوPy_XSETREFاکنون آرگومانهای خود را فقط یک بار ارزیابی میکنند. اگر آرگومانی اثر جانبی داشته باشد، این اثرهای جانبی دیگر تکرار نمیشوند. (مشارکتشده توسط ویکتور استینر در gh-98724.)نشانگر خطای مفسر اکنون همیشه نرمالسازی میشود. این بدان معناست که
PyErr_SetObject()،PyErr_SetString()و سایر توابعی که نشانگر خطا را تنظیم میکنند، اکنون استثنا را پیش از ذخیره کردن آن نرمالسازی میکنند. (مشارکتشده توسط Mark Shannon در gh-101578.)_Py_RefTotalدیگر معتبر نیست و تنها برای سازگاری با ABI حفظ شده است. توجه داشته باشید که این یک متغیر سراسری داخلی است و تنها در نسخههای دیباگ در دسترس است. اگر اتفاقاً از آن استفاده میکنید، باید استفاده از_Py_GetGlobalRefTotal()را آغاز کنید.توابع زیر اکنون فراکلاس مناسبی را برای نوع تازهایجادشده انتخاب میکنند:
ایجاد کلاسهایی که فراکلاس آنها
tp_newرا بازنویسی میکند، منسوخ شده است و در پایتون 3.14+ این کار غیرمجاز خواهد بود. توجه داشته باشید که این توابعtp_newفراکلاس را نادیده میگیرند، که ممکن است منجر به مقداردهی اولیه ناقص شود.توجه داشته باشید که
PyType_FromMetaclass()(که در Python 3.12 اضافهشده است) از پیش ایجاد کلاسهایی را که فراکلاس آنهاtp_newرا بازنویسی میکند، ممنوع کرده است (__new__()در پایتون).از آنجا که
tp_newتقریباً همهی کارهایی را که توابعPyType_From*انجام میدهند بازنویسی میکند، این دو با یکدیگر ناسازگارند. رفتار موجود -- نادیده گرفتن فراکلاس در چند مرحله از ایجاد نوع -- بهطور کلی ناامن است، زیرا (فرا)کلاسها فرض میکنند کهtp_newفراخوانی شده است. هیچ راهحل جایگزین عمومی سادهای وجود ندارد. ممکن است یکی از موارد زیر برای شما کار کند:اگر فراکلاس در کنترل شماست، از استفاده از
tp_newدر آن پرهیز کنید:اگر بتوان از مقداردهی اولیه صرفنظر کرد، میتوان آن را در عوض در
tp_initانجام داد.اگر فراکلاس نیازی به نمونهسازی از پایتون ندارد،
tp_newآن را با استفاده از پرچمPy_TPFLAGS_DISALLOW_INSTANTIATIONبرابرNULLقرار دهید. این کار آن را برای توابعPyType_From*قابل قبول میکند.
از توابع
PyType_From*پرهیز کنید: اگر به ویژگیهای مختص C (جایگاهها یا تعیین اندازه نمونه) نیاز ندارید، نوعها را با فراخوانی فراکلاس ایجاد کنید.اگر میدانید که میتوان با اطمینان از
tp_newصرفنظر کرد، هشدار منسوخشدگی را با استفاده ازwarnings.catch_warnings()پایتون فیلتر کنید.
PyOS_InputHookوPyOS_ReadlineFunctionPointerدیگر در زیرمفسرها فراخوانی نمیشوند. دلیل این امر آن است که کلاینتها بهطور کلی به وضعیت سراسری در سطح فرایند متکی هستند (از آنجا که این کالبکها هیچ راهی برای بازیابی وضعیت ماژول توسعهای ندارند).این کار همچنین از موقعیتهایی جلوگیری میکند که در آنها ممکن است ماژولهای توسعهای در یک زیرمفسر اجرا شوند که از آن پشتیبانی نمیکنند (یا هنوز در آن بارگذاری نشدهاند). برای اطلاعات بیشتر به gh-104668 مراجعه کنید.
ساختار داخلی
PyLongObjectبرای بهبود عملکرد تغییر کرده است. اگرچه ساختار داخلیPyLongObjectخصوصی است، توسط برخی ماژولهای توسعهای استفاده میشود. دیگر نباید به فیلدهای داخلی بهطور مستقیم دسترسی داشت؛ در عوض، باید از توابع API که باPyLong_...شروع میشوند استفاده کرد. دو تابع API جدید ناپایدار برای دسترسی کارآمد به مقدارهایPyLongObjectکه در یک واژهی ماشین جای میگیرند، ارائه شدهاند:تخصیصدهندههای سفارشی که از طریق
PyMem_SetAllocator()تنظیم میشوند، اکنون باید صرفنظر از دامنه حافظه، نخایمن باشند. تخصیصدهندههایی که وضعیت مخصوص خود را ندارند، از جمله «قلابها»، تحت تأثیر قرار نمیگیرند. اگر تخصیصدهنده سفارشی شما از قبل نخایمن نیست و به راهنمایی نیاز دارید، لطفاً یک issue جدید در GitHub ایجاد کنید و@ericsnowcurrentlyرا در CC قرار دهید.
منسوخ¶
مطابق با PEP 699، فیلد
ma_version_tagدرPyDictObjectبرای ماژولهای توسعهای منسوخ شده است. دسترسی به این فیلد، در زمان کامپایل یک هشدار کامپایلر تولید خواهد کرد. این فیلد در پایتون 3.14 حذف خواهد شد. (مشارکتشده توسط Ramvikrams و Kumar Aditya در gh-101193. PEP نوشتهی Ken Jin.)منسوخ کردن متغیر پیکربندی سراسری:
Py_DebugFlag: ازPyConfig.parser_debugاستفاده کنیدPy_VerboseFlag: ازPyConfig.verboseاستفاده کنیدPy_QuietFlag: ازPyConfig.quietاستفاده کنیدPy_InteractiveFlag: ازPyConfig.interactiveاستفاده کنیدPy_InspectFlag: ازPyConfig.inspectاستفاده کنیدPy_OptimizeFlag: ازPyConfig.optimization_levelاستفاده کنیدPy_NoSiteFlag: ازPyConfig.site_importاستفاده کنیدPy_BytesWarningFlag: ازPyConfig.bytes_warningاستفاده کنیدPy_FrozenFlag: ازPyConfig.pathconfig_warningsاستفاده کنیدPy_IgnoreEnvironmentFlag: ازPyConfig.use_environmentاستفاده کنیدPy_DontWriteBytecodeFlag: ازPyConfig.write_bytecodeاستفاده کنیدPy_NoUserSiteDirectory: ازPyConfig.user_site_directoryاستفاده کنیدPy_UnbufferedStdioFlag: ازPyConfig.buffered_stdioاستفاده کنیدPy_HashRandomizationFlag: ازPyConfig.use_hash_seedوPyConfig.hash_seedاستفاده کنیدPy_IsolatedFlag: ازPyConfig.isolatedاستفاده کنیدPy_LegacyWindowsFSEncodingFlag: استفاده ازPyPreConfig.legacy_windows_fs_encodingPy_LegacyWindowsStdioFlag: استفاده ازPyConfig.legacy_windows_stdioPy_FileSystemDefaultEncoding: ازPyConfig.filesystem_encodingاستفاده کنیدPy_HasFileSystemDefaultEncoding: ازPyConfig.filesystem_encodingاستفاده کنیدPy_FileSystemDefaultEncodeErrors: ازPyConfig.filesystem_errorsاستفاده کنیدPy_UTF8Mode: ازPyPreConfig.utf8_modeاستفاده کنید (نگاه کنید بهPy_PreInitialize())
به جای آن باید از API
Py_InitializeFromConfig()به همراهPyConfigاستفاده کرد. (مشارکت Victor Stinner در gh-77782.)ایجاد
نوعهای تغییرناپذیربا پایههای تغییرپذیر منسوخ شده است و در پایتون 3.14 غیرفعال خواهد شد. (gh-95388)سرآیند
structmember.hمنسوخ شده است، هرچند همچنان در دسترس است و برنامهای برای حذف آن وجود ندارد.محتویات آن اکنون تنها با گنجاندن
Python.hدر دسترس است، با افزودن پیشوندPyدر صورتی که وجود نداشته باشد:ماکروهای نوع مانند
Py_T_INT،Py_T_DOUBLEو غیره (پیشترT_INT،T_DOUBLEو غیره)پرچمهای
Py_READONLY(پیشترREADONLY) وPy_AUDIT_READ(پیشتر تماماً با حروف بزرگ)
چندین آیتم از
Python.hدر دسترس قرار نمیگیرند:T_OBJECT(ازPy_T_OBJECT_EXاستفاده کنید)T_NONE(پیشتر مستندنشده و بسیار عجیبوغریب)ماکروی
WRITE_RESTRICTEDکه کاری انجام نمیدهد.ماکروهای
RESTRICTEDوREAD_RESTRICTED، معادلهایPy_AUDIT_READ.در برخی پیکربندیها،
<stddef.h>ازPython.hگنجانده نمیشود. هنگام استفاده ازoffsetof()باید آن را بهصورت دستی گنجاند.
سرآیند منسوخ همچنان محتوای اصلی خود را با نامهای اصلی ارائه میدهد. کد قدیمی شما میتواند بدون تغییر باقی بماند، مگر اینکه include اضافی و ماکروهای بدون فضای نام برایتان بسیار آزاردهنده باشند.
(ارائه شده در gh-47146 توسط Petr Viktorin، بر پایهی کارهای پیشین Alexander Belopolsky و Matthias Braun.)
PyErr_Fetch()وPyErr_Restore()منسوخ شدهاند. به جای آنها ازPyErr_GetRaisedException()وPyErr_SetRaisedException()استفاده کنید. (مشارکتشده توسط Mark Shannon در gh-101578.)PyErr_Display()منسوخ شده است. به جای آن ازPyErr_DisplayException()استفاده کنید. (مشارکتشده توسط Irit Katriel در gh-102755)._PyErr_ChainExceptionsمنسوخ شده است. به جای آن از_PyErr_ChainExceptions1استفاده کنید. (مشارکتشده توسط Irit Katriel در gh-102192.)استفاده از
PyType_FromSpec()،PyType_FromSpecWithBases()یاPyType_FromModuleAndSpec()برای ایجاد کلاسی که فراکلاس آنtp_newرا بازنویسی میکند، منسوخ شده است. به جای آن، فراکلاس را فراخوانی کنید.
در انتظار حذف در پایتون 3.14¶
فیلد
ma_version_tagدرPyDictObjectبرای ماژولهای توسعهای (PEP 699؛ gh-101193).ایجاد
نوعهای تغییرناپذیربا کلاسهای پایهی تغییرپذیر (gh-95388).
در انتظار حذف در پایتون 3.15¶
تابع
PyImport_ImportModuleNoBlock(): بهجای آن ازPyImport_ImportModule()استفاده کنید.PyWeakref_GetObject()وPyWeakref_GET_OBJECT(): بهجای آنها ازPyWeakref_GetRef()استفاده کنید. میتوان از پروژهی pythoncapi-compat برای دریافتPyWeakref_GetRef()در پایتون 3.12 و نسخههای قدیمیتر استفاده کرد.نوع
Py_UNICODEو ماکرویPy_UNICODE_WIDE: بهجای آنها ازwchar_tاستفاده کنید.PyUnicode_AsDecodedObject(): بهجای آن ازPyCodec_Decode()استفاده کنید.PyUnicode_AsDecodedUnicode(): به جای آن ازPyCodec_Decode()استفاده کنید؛ توجه داشته باشید که برخی کدکها، برای مثال "base64"، ممکن است نوعی غیر ازstr، مانندbytesبرگردانند.PyUnicode_AsEncodedObject(): به جای آن ازPyCodec_Encode()استفاده کنید.PyUnicode_AsEncodedUnicode(): بهجای آن ازPyCodec_Encode()استفاده کنید؛ توجه داشته باشید که برخی کدکها (برای مثال، "base64") ممکن است نوعی غیر ازbytes، مانندstrبرگردانند.توابع مقداردهی اولیه پایتون، منسوخشده در پایتون 3.13:
Py_GetPath(): به جای آن ازPyConfig_Get("module_search_paths")(sys.path) استفاده کنید.Py_GetPrefix(): بهجای آن ازPyConfig_Get("base_prefix")(sys.base_prefix) استفاده کنید. اگر لازم باشد محیطهای مجازی مدیریت شوند، ازPyConfig_Get("prefix")(sys.prefix) استفاده کنید.Py_GetExecPrefix(): به جای آن ازPyConfig_Get("base_exec_prefix")(sys.base_exec_prefix) استفاده کنید. اگر نیاز به مدیریت محیطهای مجازی وجود دارد، ازPyConfig_Get("exec_prefix")(sys.exec_prefix) استفاده کنید.Py_GetProgramFullPath(): بهجای آن ازPyConfig_Get("executable")(sys.executable) استفاده کنید.Py_GetProgramName(): به جای آن ازPyConfig_Get("executable")(sys.executable) استفاده کنید.Py_GetPythonHome(): بهجای آن ازPyConfig_Get("home")یا متغیر محیطیPYTHONHOMEاستفاده کنید.
میتوان از پروژهی pythoncapi-compat برای دسترسی به
PyConfig_Get()در پایتون 3.13 و قدیمیتر استفاده کرد.توابعی برای پیکربندی راهاندازی پایتون، که در پایتون 3.11 منسوخ شدهاند:
PySys_SetArgvEx(): بهجای آن،PyConfig.argvرا تنظیم کنید.PySys_SetArgv(): بهجای آن،PyConfig.argvرا تنظیم کنید.Py_SetProgramName(): به جای آن،PyConfig.program_nameرا تنظیم کنید.Py_SetPythonHome(): به جای آن،PyConfig.homeرا تنظیم کنید.PySys_ResetWarnOptions(): به جای آن،sys.warnoptionsوwarnings.filtersرا پاک کنید.
بهجای آن، باید از API تابع
Py_InitializeFromConfig()به همراهPyConfigاستفاده کرد.متغیرهای پیکربندی سراسری:
Py_DebugFlag: بهجای آن ازPyConfig.parser_debugیاPyConfig_Get("parser_debug")استفاده کنید.Py_VerboseFlag: به جای آن ازPyConfig.verboseیاPyConfig_Get("verbose")استفاده کنید.Py_QuietFlag: به جای آن ازPyConfig.quietیاPyConfig_Get("quiet")استفاده کنید.Py_InteractiveFlag: به جای آن ازPyConfig.interactiveیاPyConfig_Get("interactive")استفاده کنید.Py_InspectFlag: به جای آن ازPyConfig.inspectیاPyConfig_Get("inspect")استفاده کنید.Py_OptimizeFlag: بهجای آن ازPyConfig.optimization_levelیاPyConfig_Get("optimization_level")استفاده کنید.Py_NoSiteFlag: به جای آن ازPyConfig.site_importیاPyConfig_Get("site_import")استفاده کنید.Py_BytesWarningFlag: به جای آن ازPyConfig.bytes_warningیاPyConfig_Get("bytes_warning")استفاده کنید.Py_FrozenFlag: بهجای آن ازPyConfig.pathconfig_warningsیاPyConfig_Get("pathconfig_warnings")استفاده کنید.Py_IgnoreEnvironmentFlag: بهجای آن ازPyConfig.use_environmentیاPyConfig_Get("use_environment")استفاده کنید.Py_DontWriteBytecodeFlag: بهجای آن ازPyConfig.write_bytecodeیاPyConfig_Get("write_bytecode")استفاده کنید.Py_NoUserSiteDirectory: بهجای آن ازPyConfig.user_site_directoryیاPyConfig_Get("user_site_directory")استفاده کنید.Py_UnbufferedStdioFlag: به جای آن ازPyConfig.buffered_stdioیاPyConfig_Get("buffered_stdio")استفاده کنید.Py_HashRandomizationFlag: به جای آن ازPyConfig.use_hash_seedوPyConfig.hash_seedیاPyConfig_Get("hash_seed")استفاده کنید.Py_IsolatedFlag: بهجای آن ازPyConfig.isolatedیاPyConfig_Get("isolated")استفاده کنید.Py_LegacyWindowsFSEncodingFlag: بهجای آن ازPyPreConfig.legacy_windows_fs_encodingیاPyConfig_Get("legacy_windows_fs_encoding")استفاده کنید.Py_LegacyWindowsStdioFlag: به جای آن ازPyConfig.legacy_windows_stdioیاPyConfig_Get("legacy_windows_stdio")استفاده کنید.Py_FileSystemDefaultEncoding،Py_HasFileSystemDefaultEncoding: به جای آن ازPyConfig.filesystem_encodingیاPyConfig_Get("filesystem_encoding")استفاده کنید.Py_FileSystemDefaultEncodeErrors: بهجای آن ازPyConfig.filesystem_errorsیاPyConfig_Get("filesystem_errors")استفاده کنید.Py_UTF8Mode: بهجای آن ازPyPreConfig.utf8_modeیاPyConfig_Get("utf8_mode")استفاده کنید. (نگاه کنید بهPy_PreInitialize())
برای تنظیم این گزینهها باید از API
Py_InitializeFromConfig()همراه باPyConfigاستفاده شود. یا میتوان ازPyConfig_Get()برای دریافت این گزینهها در رانتایم استفاده کرد.
در انتظار حذف در پایتون 3.16¶
نسخهی همراه
libmpdec.
در انتظار حذف در نسخههای آینده¶
APIهای زیر منسوخ شدهاند و حذف خواهند شد، هرچند در حال حاضر هیچ تاریخی برای حذف آنها تعیین نشده است.
Py_TPFLAGS_HAVE_FINALIZE: از پایتون 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(): از پایتون 3.12 به بعد نیازی به آن نیستPyErr_Display(): بهجای آن ازPyErr_DisplayException()استفاده کنید._PyErr_ChainExceptions(): بهجای آن از_PyErr_ChainExceptions1()استفاده کنید.عضو
PyBytesObject.ob_shash: به جای آنPyObject_Hash()را فراخوانی کنید.API ذخیرهسازی محلی نخ (TLS):
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(): از پایتون 3.7 به بعد مورد نیاز نیست.
حذفشده¶
حذف پروندهی سرآیند
token.h. هرگز هیچ API عمومی C برای توکنساز وجود نداشت. پروندهی سرآیندtoken.hفقط برای استفادهی درونیهای پایتون طراحیشده بود. (مشارکتشده توسط Victor Stinner در gh-92651.)APIهای قدیمی یونیکد حذف شدهاند. برای جزئیات به PEP 623 مراجعه کنید.
PyUnicode_WCHAR_KINDPyUnicode_AS_UNICODE()PyUnicode_AsUnicode()PyUnicode_AsUnicodeAndSize()PyUnicode_AS_DATA()PyUnicode_FromUnicode()PyUnicode_GET_SIZE()PyUnicode_GetSize()PyUnicode_GET_DATA_SIZE()
ماکروی تابع
PyUnicode_InternImmortal()حذف شد. (مشارکتشده توسط Victor Stinner در gh-85858.)