تازههای پایتون 3.13¶
- ویرایشگرها:
Adam Turner و Thomas Wouters
این مقاله قابلیتهای جدید پایتون 3.13 را در مقایسه با 3.12 توضیح میدهد. پایتون 3.13 در ۷ اکتبر ۲۰۲۴ منتشر شد. برای جزئیات کامل، به فهرست تغییرات مراجعه کنید.
همچنین ملاحظه نمائید
PEP 719 -- زمانبندی انتشار پایتون 3.13
خلاصه -- نکات برجستهی انتشار¶
پایتون 3.13 نسخهای پایدار از زبان برنامهنویسی پایتون است که ترکیبی از تغییرات در زبان، پیادهسازی و کتابخانه استاندارد را در بر میگیرد. بزرگترین تغییرات شامل مفسر تعاملی جدید، پشتیبانی آزمایشی از اجرا در حالت نخآزاد (PEP 703) و کامپایلر در لحظه (JIT) (PEP 744) است.
پیامهای خطا همچنان بهبود مییابند و ردگیریها اکنون بهطور پیشفرض بهصورت رنگی برجسته میشوند. تابع توکار locals() اکنون دارای معناشناسی تعریفشده برای تغییر نگاشت بازگرداندهشده است و پارامترهای نوع اکنون از مقادیر پیشفرض پشتیبانی میکنند.
تغییرات کتابخانه شامل حذف APIها و ماژولهای منسوخ، و همچنین بهبودهای همیشگی در کاربرپسندی و صحت است. چندین ماژول قدیمی کتابخانه استاندارد اکنون در پی منسوخشدنشان در پایتون 3.11 حذف شدهاند (PEP 594).
این مقاله تلاش نمیکند مشخصات کاملی از تمام ویژگیهای جدید ارائه دهد، بلکه در عوض مروری کلی و مناسب ارائه میکند. برای جزئیات کامل به مستنداتی مانند مرجع کتابخانه و مرجع زبان مراجعه کنید. برای درک پیادهسازی کامل و دلایل طراحی یک تغییر، به PEP مربوط به ویژگی جدید مورد نظر مراجعه کنید؛ اما توجه داشته باشید که PEPها معمولاً پس از پیادهسازی کامل یک ویژگی، بهروز نگه داشته نمیشوند. برای راهنمایی دربارهی ارتقا از نسخههای قبلی پایتون، Porting to Python 3.13 را ببینید.
بهبودهای مفسر:
یک مفسر تعاملی بسیار بهبودیافته و پیامهای خطای بهبودیافته.
PEP 667: تابع توکار
locals()اکنون هنگام تغییر دادن نگاشت بازگرداندهشده، دارای معناشناسی تعریفشده است. ابزارهای اشکالزدایی پایتون و ابزارهای مشابه اکنون میتوانند متغیرهای محلی در محدودههای بهینهشده را حتی در حین اجرای همزمان کد با اطمینان بیشتری بهروزرسانی کنند.PEP 703: سیپایتون 3.13 بهطور آزمایشی از اجرا با قفل مفسر سراسری غیرفعال پشتیبانی میکند. برای جزئیات بیشتر به سیپایتون نخآزاد مراجعه کنید.
PEP 744: یک کامپایلر در لحظه ابتدایی افزوده شد. این کامپایلر در حال حاضر بهطور پیشفرض غیرفعال است (هرچند ممکن است بعداً آن را فعال کنیم). بهبودهای عملکرد اندک هستند -- انتظار داریم این موضوع را طی چند نسخهی بعدی بهبود دهیم.
پشتیبانی از رنگ در مفسر تعاملی جدید، و همچنین در ردگیریها و خروجی doctest. این قابلیت را میتوان از طریق متغیرهای محیطی
PYTHON_COLORSوNO_COLORغیرفعال کرد.
بهبودهای مدل داده پایتون:
__static_attributes__نام ویژگیهایی را که در هر تابعی در بدنهی کلاس از طریقself.Xبه آنها دسترسی میشود، ذخیره میکند.__firstlineno__شمارهی سطر نخستِ تعریف کلاس را ثبت میکند.
بهبودهای چشمگیر در کتابخانه استاندارد:
افزودن استثنای جدید
PythonFinalizationErrorکه هنگام مسدود شدن عملیاتی در نهاییسازی مطرح میشود.ماژول
argparseاکنون از منسوخ کردن گزینههای خط فرمان، آرگومانهای جایگاهی و زیرفرمانها پشتیبانی میکند.توابع جدید
base64.z85encode()وbase64.z85decode()از کدگذاری و کدگشایی Z85 data پشتیبانی میکنند.ماژول
copyاکنون تابعcopy.replace()را دارد که از بسیاری از نوعهای توکار و هر کلاسی که متد__replace__()را تعریف کرده باشد، پشتیبانی میکند.ماژول جدید
dbm.sqlite3اکنون بکاند پیشفرضdbmاست.ماژول
osدارای بدنهای از توابع جدید برای کار با توصیفگرهای پروندهی اعلان تایمر لینوکس است.ماژول
randomاکنون یک رابط خط فرمان دارد.
بهبودهای امنیتی:
ssl.create_default_context()مقادیرssl.VERIFY_X509_PARTIAL_CHAINوssl.VERIFY_X509_STRICTرا بهعنوان پرچمهای پیشفرض تنظیم میکند.
بهبودهای C API:
جایگاه
Py_mod_gilاکنون برای نشان دادن اینکه یک ماژول توسعهای از اجرا با GIL غیرفعال پشتیبانی میکند، استفاده میشود.PyTime C API افزوده شده است که دسترسی به ساعتهای سیستم را فراهم میکند.
PyMutexیک قفل متقابل سبکوزن جدید است که تنها یک بایت فضا اشغال میکند.در C API، بدنهای جدید از توابع برای تولید رویدادهای نظارتی PEP 669 وجود دارد.
ویژگیهای جدید نوعدهی:
PEP 696: پارامترهای نوع (
typing.TypeVar،typing.ParamSpecوtyping.TypeVarTuple) اکنون از مقادیر پیشفرض پشتیبانی میکنند.PEP 702: دکوراتور جدید
warnings.deprecated()پشتیبانی از علامتگذاری موارد منسوخشده در سیستم نوع و در زمان اجرا را اضافه میکند.PEP 705: میتوان از
typing.ReadOnlyبرای علامتگذاری یک آیتم از یکtyping.TypedDictبه عنوان فقطخواندنی برای بررسیگرهای نوع استفاده کرد.PEP 742:
typing.TypeIsبهعنوان جایگزینی برایtyping.TypeGuard، رفتار شهودیتری در محدودسازی نوع (type narrowing) ارائه میدهد.
پشتیبانی پلتفرم:
PEP 730: iOS اپل اکنون یک پلتفرم با پشتیبانی رسمی است که در سطح ۳ قرار دارد.
PEP 738: اندروید اکنون یک پلتفرم با پشتیبانی رسمی است، در سطح ۳.
wasm32-wasiاکنون بهعنوان یک پلتفرم سطح ۲ (tier 2) پشتیبانی میشود.wasm32-emscriptenدیگر یک پلتفرم با پشتیبانی رسمی نیست.
حذفهای مهم:
PEP 594: ۱۹ «باتری مرده» باقیمانده (ماژولهای قدیمی کتابخانه استاندارد) از کتابخانه استاندارد حذف شدهاند:
aifc،audioop،cgi،cgitb،chunk،crypt،imghdr،mailcap،msilib،nis،nntplib،ossaudiodev،pipes،sndhdr،spwd،sunau،telnetlib،uuوxdrlib.ابزار 2to3 و ماژول
lib2to3حذف شدند (منسوخ در پایتون 3.11).حذف ماژول
tkinter.tix(منسوخ در Python 3.6).تابع
locale.resetlocale()حذف شد.فضاهای نام
typing.ioوtyping.reحذف شدند.توصیفگرهای زنجیرهای
classmethodحذف شدند.
تغییرات زمانبندی انتشار:
PEP 602 («چرخه انتشار سالانه پایتون») بهروزرسانی شده است تا دوره پشتیبانی کامل («رفع اشکال») برای نسخههای جدید به دو سال تمدید شود. این سیاست بهروزرسانیشده بدان معناست که:
پایتون 3.9 تا 3.12 یک سال و نیم پشتیبانی کامل دارند و پس از آن، سه سال و نیم اصلاحات امنیتی دریافت میکنند.
پایتون 3.13 و نسخههای بعد از آن، دو سال پشتیبانی کامل و سپس سه سال اصلاحات امنیتی دارند.
ویژگیهای جدید¶
مفسر تعاملی بهتر¶
پایتون اکنون بهصورت پیشفرض از یک پوستهی تعاملی جدید استفاده میکند که بر پایهی کد PyPy project است. هنگامی که کاربر REPL را از یک پایانهی تعاملی راهاندازی میکند، اکنون از قابلیتهای جدید زیر پشتیبانی میشود:
ویرایش چندسطری با حفظ تاریخچه.
پشتیبانی مستقیم از دستورهای مخصوص REPL مانند help، exit و quit، بدون نیاز به فراخوانی آنها بهعنوان تابع.
اعلانها و ردگیریها با رنگ فعال بهصورت پیشفرض.
مرور تعاملی راهنما با استفاده از F1 به همراه یک تاریخچه فرمان جداگانه.
مرور تاریخچه با استفاده از F2 که از خروجی و همچنین اعلانهای >>> و ... عبور میکند.
«حالت چسباندن» با F3 که چسباندن بلوکهای بزرگتر کد را آسانتر میکند (برای بازگشت به اعلان معمولی، دوباره F3 را فشار دهید).
برای غیرفعال کردن پوسته تعاملی جدید، متغیر محیطی PYTHON_BASIC_REPL را تنظیم کنید. برای اطلاعات بیشتر دربارهی حالت تعاملی، حالت تعاملی را ببینید.
(ارائهشده توسط Pablo Galindo Salgado، Łukasz Langa و Lysandros Nikolaou در gh-111201 بر پایهی کدی از پروژهی PyPy. پشتیبانی ویندوز ارائهشده توسط Dino Viehland و Anthony Shaw.)
پیامهای خطای بهبودیافته¶
مفسر اکنون بهطور پیشفرض هنگام نمایش ردگیریها در پایانه از رنگ استفاده میکند. این قابلیت قابل کنترل است از طریق متغیر محیطی جدید
PYTHON_COLORSو همچنین متغیرهای محیطی کانونیکالNO_COLORوFORCE_COLOR. (مشارکتشده توسط Pablo Galindo Salgado در gh-112730.)یک اشتباه رایج این است که اسکریپتی با همان نام یک ماژول کتابخانه استاندارد نوشته شود. هنگامی که این موضوع منجر به خطا میشود، اکنون پیام خطای مفیدتری نمایش میدهیم:
$ python random.py Traceback (most recent call last): File "/home/me/random.py", line 1, in <module> import random File "/home/me/random.py", line 3, in <module> print(random.randint(5)) ^^^^^^^^^^^^^^ AttributeError: module 'random' has no attribute 'randint' (consider renaming '/home/me/random.py' since it has the same name as the standard library module named 'random' and prevents importing that standard library module)
بهطور مشابه، اگر اسکریپتی همنام با ماژول شخص ثالثی باشد که میخواهد آن را ایمپورت کند و این کار منجر به خطا شود، ما نیز پیام خطای مفیدتری نمایش میدهیم:
$ python numpy.py Traceback (most recent call last): File "/home/me/numpy.py", line 1, in <module> import numpy as np File "/home/me/numpy.py", line 3, in <module> np.array([1, 2, 3]) ^^^^^^^^ AttributeError: module 'numpy' has no attribute 'array' (consider renaming '/home/me/numpy.py' if it has the same name as a library you intended to import)
(مشارکتشده توسط Shantanu Jain در gh-95754.)
پیام خطا اکنون تلاش میکند تا هنگامی که آرگومان کلیدواژهای نادرستی به یک تابع ارسال میشود، آرگومان کلیدواژهای صحیح را پیشنهاد دهد.
>>> "Better error messages!".split(max_split=1) Traceback (most recent call last): File "<python-input-0>", line 1, in <module> "Better error messages!".split(max_split=1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^ TypeError: split() got an unexpected keyword argument 'max_split'. Did you mean 'maxsplit'?
(مشارکتشده توسط Pablo Galindo Salgado و Shantanu Jain در gh-107944.)
سیپایتون نخآزاد¶
سیپایتون اکنون بهصورت آزمایشی از اجرا در حالت نخآزاد، با global interpreter lock (GIL) غیرفعال، پشتیبانی میکند. این یک ویژگی آزمایشی است و بنابراین بهصورت پیشفرض فعال نیست. حالت نخآزاد به یک پرونده اجرایی متفاوت نیاز دارد که معمولاً python3.13t یا python3.13t.exe نام دارد. میتوان پروندههای دودویی پیشساختهای را که با برچسب نخآزاد مشخص شدهاند، بهعنوان بخشی از نصبکنندههای رسمی Windows و macOS نصب کرد، یا میتوان سیپایتون را از کد منبع با گزینهی --disable-gil ساخت.
اجرای نخآزاد با اجرای موازی نخها روی هستههای CPU موجود، امکان بهرهبرداری کامل از توان پردازشی در دسترس را فراهم میکند. اگرچه همهی نرمافزارها بهطور خودکار از این امر بهرهمند نمیشوند، برنامههایی که با در نظر گرفتن نخبندی طراحی شدهاند، روی سختافزار چندهستهای سریعتر اجرا میشوند. حالت نخآزاد آزمایشی است و کار روی بهبود آن ادامه دارد: انتظار داشته باشید با برخی اشکالات و افت عملکرد قابلتوجه در حالت تکنخی مواجه شوید. نسخههای نخآزاد سیپایتون از اجرای اختیاری با فعال بودن قفل مفسر سراسری در رانتایم، با استفاده از متغیر محیطی PYTHON_GIL یا گزینهی خط فرمان -X gil=1 پشتیبانی میکنند.
برای بررسی اینکه آیا مفسر فعلی از نخبندی آزاد پشتیبانی میکند، python -VV و sys.version شامل عبارت "experimental free-threading build" هستند. از تابع جدید sys._is_gil_enabled() میتوان برای بررسی اینکه آیا قفل مفسر سراسری در فرایند در حال اجرا واقعاً غیرفعال است، استفاده کرد.
ماژولهای توسعهای C-API باید بهطور خاص برای ساخت نخآزاد ساخته شوند. افزونههایی که از اجرا با GIL غیرفعال پشتیبانی میکنند، باید از جایگاه Py_mod_gil استفاده کنند. افزونههایی که از مقداردهی اولیه تکمرحلهای استفاده میکنند، باید از PyUnstable_Module_SetGIL() استفاده کنند تا مشخص کنند که آیا از اجرا با GIL غیرفعال پشتیبانی میکنند یا خیر. ایمپورت کردن افزونههای C که از این سازوکارها استفاده نمیکنند، باعث فعال شدن GIL میشود، مگر اینکه GIL بهطور صریح با متغیر محیطی PYTHON_GIL یا گزینهی -X gil=0 غیرفعال شده باشد. برای نصب بستههای دارای افزونههای C در ساخت نخآزاد، به pip 24.1 یا جدیدتر نیاز است.
انجام این کار به لطف افراد و سازمانهای بسیاری ممکن شد، از جمله کامیونیتی بزرگ مشارکتکنندگان در پایتون و پروژههای شخص ثالث برای آزمودن و فعالسازی پشتیبانی از نخبندی آزاد. از مشارکتکنندگان برجسته میتوان به Sam Gross، Ken Jin، Donghee Na، Itamar Oren، Matt Page، Brett Simmers، Dino Viehland، Carl Meyer، Nathan Goldbaum، Ralf Gommers، Lysandros Nikolaou و بسیاری دیگر اشاره کرد. بسیاری از این مشارکتکنندگان در استخدام Meta هستند که منابع مهندسی چشمگیری برای پشتیبانی از این پروژه فراهم کرده است.
همچنین ملاحظه نمائید
PEP 703 "Making the Global Interpreter Lock Optional in CPython" شامل شرح دلایل و اطلاعات پیرامون این کار است.
پورتکردن ماژولهای توسعهای برای پشتیبانی از نخبندی آزاد: یک راهنمای پورتکردن نگهداریشده توسط کامیونیتی برای نویسندگان ماژولهای توسعهای.
یک کامپایلر آزمایشی در لحظه¶
وقتی سیپایتون با استفاده از گزینهی --enable-experimental-jit پیکربندی و ساخته شود، کامپایلری در لحظه افزوده میشود که ممکن است سرعت برخی برنامههای پایتون را افزایش دهد. در ویندوز، برای فعالسازی JIT از PCbuild/build.bat --experimental-jit استفاده کنید یا برای فعالسازی مفسر سطح ۲ (Tier 2) از --experimental-jit-interpreter استفاده کنید. نیازمندیهای ساخت و اطلاعات پشتیبان بیشتر در Tools/jit/README.md آمدهاند.
گزینهی --enable-experimental-jit این مقادیر (اختیاری) را میپذیرد و اگر --enable-experimental-jit بدون مقدار اختیاری ذکر شود، مقدار پیشفرض yes است.
no: کل خط لوله Tier 2 و JIT را غیرفعال میکند.yes: فعالسازی JIT. برای غیرفعالسازی JIT در زمان اجرا، متغیر محیطیPYTHON_JIT=0را تنظیم کنید.yes-off: JIT را میسازد اما بهطور پیشفرض آن را غیرفعال میکند. برای فعالسازی JIT در زمان اجرا، متغیر محیطیPYTHON_JIT=1را تنظیم کنید.interpreter: مفسر Tier 2 را فعال میکند اما JIT را غیرفعال میکند. مفسر را میتوان با اجرا بههمراهPYTHON_JIT=0غیرفعال کرد.
معماری داخلی تقریباً به شرح زیر است:
با بایتکد تخصصی سطح ۱ (Tier 1) آغاز میکنیم. برای جزئیات به تازههای 3.11 مراجعه کنید.
وقتی بایتکد Tier 1 بهاندازه کافی داغ شود، به یک نمایش میانی (IR) جدید و کاملاً داخلی ترجمه میشود که Tier 2 IR نامیده میشود و گاهی نیز به آن میکرو-عملیات («uops») گفته میشود.
نمایش میانی (IR) سطح ۲ از همان ماشین مجازی مبتنی بر پشتهی سطح ۱ استفاده میکند، اما قالب دستورالعمل آن برای ترجمه به کد ماشین مناسبتر است.
ما چندین مرحلهی بهینهسازی برای Tier 2 IR داریم که پیش از آنکه تفسیر شود یا به کد ماشین ترجمه شود، اعمال میشوند.
یک مفسر سطح ۲ (Tier 2) وجود دارد، اما این مفسر عمدتاً برای اشکالزدایی مراحل اولیهی خط لولهی بهینهسازی (pipeline) در نظر گرفته شده است. مفسر سطح ۲ را میتوان با پیکربندی پایتون از طریق
--enable-experimental-jit=interpreterفعال کرد.هنگامی که JIT فعال باشد، نمایش میانی سطح ۲ (Tier 2 IR) بهینهشده به کد ماشین تبدیل میشود و سپس اجرا میگردد.
فرایند ترجمه به کد ماشین از تکنیکی به نام کپیوپچ (copy-and-patch) استفاده میکند. این فرایند هیچ وابستگی رانتایمی ندارد، اما وابستگی جدیدی در زمان ساخت به LLVM وجود دارد.
همچنین ملاحظه نمائید
(JIT توسط برانت بوخر، الهامگرفته از مقالهای از هائوران شو و فردریک کیولستاد. نمایش میانی (IR) سطح ۲ توسط مارک شانون و گیدو ون روسوم. بهینهساز سطح ۲ توسط کن جین.)
معناشناسی تغییر برای locals() تعریف شد¶
از نظر تاریخی، نتیجه مورد انتظار تغییر دادن مقدار بازگشتی locals() به هر یک از پیادهسازیهای پایتون واگذار شده بود تا آن را تعریف کند. از پایتون 3.13 به بعد، PEP 667 رفتار تاریخی سیپایتون را برای اغلب محدودههای اجرای کد استاندارد میکند، اما محدودههای بهینهشده (توابع، تولیدگرها، همروالها، درکها و عبارتهای تولیدگر) را تغییر میدهد تا بهصراحت تصاویر لحظهای مستقلی از متغیرهای محلی که در حال حاضر انتساب یافتهاند، از جمله متغیرهای غیرمحلی که بهصورت محلی به آنها ارجاع داده شده و در بستارها ثبت شدهاند، بازگردانند.
این تغییر در معناشناسی locals() در محدودههای بهینهشده، بر رفتار پیشفرض توابع اجرای کد نیز تأثیر میگذارد؛ این توابع در صورت ارائهنشدن فضای نام صریح، بهطور ضمنی locals() را هدف میگیرند (مانند exec() و eval()). در نسخههای پیشین، اینکه آیا پس از فراخوانی تابع اجرای کد میتوان با فراخوانی locals() به تغییرات دسترسی داشت یا نه، وابسته به پیادهسازی بود. بهطور خاص در سیپایتون، چنین کدی معمولاً بهظاهر بهدرستی کار میکرد، اما گاهی ممکن بود در محدودههای بهینهشده، بسته به کدهای دیگر (از جمله اشکالزداها و ابزارهای ردگیری اجرای کد) که ممکن بود تصویر لحظهای مشترک را در آن محدوده بازنشانی کنند، شکست بخورد. اکنون، کد همیشه نسبت به یک تصویر لحظهای مستقل از متغیرهای محلی در محدودههای بهینهشده اجرا میشود و در نتیجه، تغییرات هرگز در فراخوانیهای بعدی locals() قابل مشاهده نخواهند بود. برای دسترسی به تغییراتی که در این موارد ایجاد شدهاند، اکنون باید یک ارجاع صریح به فضای نام، به تابع مربوطه ارسال شود. بهعنوان جایگزین، ممکن است منطقی باشد که کد متأثر را بهروزرسانی کنید تا از یک API اجرای کد سطح بالاتر که فضای نام حاصل از اجرای کد را برمیگرداند استفاده کند (برای مثال runpy.run_path() هنگام اجرای پروندههای پایتون از دیسک).
برای اطمینان از اینکه اشکالزداها و ابزارهای مشابه بتوانند متغیرهای محلی را در محدودههای متأثر از این تغییر بهطور قابل اطمینان بهروزرسانی کنند، FrameType.f_locals اکنون بهجای بازگرداندن یک نمونه dict مشترک که بهطور ناسازگار بهروزرسانی میشد و معناشناسی زمان اجرای تعریفنشدهای داشت، یک پراکسی نوشتنهمزمان به متغیرهای محلی فریم و متغیرهای غیرمحلی (nonlocal) ارجاعشده بهصورت محلی در این محدودهها برمیگرداند.
برای جزئیات بیشتر، از جمله تغییرات مرتبط در C API و موارد منسوخشده، به PEP 667 مراجعه کنید. یادداشتهای انتقال برای APIهای پایتون و APIهای C که تحت تأثیر قرار گرفتهاند نیز در ادامه ارائه شدهاند.
(PEP و پیادهسازی آن توسط Mark Shannon و Tian Gao در gh-74929 ارائه شدهاند. بهروزرسانیهای مستندات توسط Guido van Rossum و Alyssa Coghlan فراهم شده است.)
پشتیبانی از پلتفرمهای موبایل¶
PEP 730: iOS اکنون یک پلتفرم پشتیبانیشده بر اساس PEP 11 است، با هدفهای arm64-apple-ios و arm64-apple-ios-simulator در سطح ۳ (به ترتیب دستگاههای iPhone و iPad که پس از ۲۰۱۳ عرضه شدهاند، و شبیهساز Xcode iOS در حال اجرا بر روی سختافزار Apple silicon). x86_64-apple-ios-simulator (شبیهساز Xcode iOS در حال اجرا بر روی سختافزار قدیمیتر x86_64) یک پلتفرم پشتیبانیشده در سطح ۳ نیست، اما از پشتیبانی در حد توان (best-effort) برخوردار خواهد بود. (PEP توسط Russell Keith-Magee نوشته شده و پیادهسازی آن در gh-114099 ارائه شده است.)
PEP 738: اندروید اکنون یک پلتفرم پشتیبانیشدهی PEP 11 است، با هدفهای aarch64-linux-android و x86_64-linux-android در سطح ۳. هدفهای ۳۲بیتی arm-linux-androideabi و i686-linux-android پلتفرمهای پشتیبانیشدهی سطح ۳ نیستند، اما پشتیبانی در حد توان (best-effort) خواهند داشت. (PEP نوشتهشده و پیادهسازی توسط Malcolm Smith در gh-116622 ارائهشده است.)
سایر تغییرات زبان¶
کامپایلر اکنون فضای سفید ابتدایی مشترک را از هر سطر در یک رشته مستند حذف میکند. این امر اندازهی نهانگاه بایتکد (مانند پروندههای
.pyc) را کاهش میدهد؛ برای مثال، درsqlalchemy.orm.sessionاز SQLAlchemy 2.0 کاهشی حدود ۵٪ در اندازهی پرونده حاصل میشود. این تغییر بر ابزارهایی که از رشتههای مستند استفاده میکنند، مانندdoctest، تأثیر میگذارد.>>> def spam(): ... """ ... This is a docstring with ... leading whitespace. ... ... It even has multiple paragraphs! ... """ ... >>> spam.__doc__ '\nThis is a docstring with\n leading whitespace.\n\nIt even has multiple paragraphs!\n'
(مشارکتشده توسط Inada Naoki در gh-81283.)
محدودههای حاشیهنویسی درون محدودههای کلاس اکنون میتوانند شامل لامبداها و درکها باشند. درکهایی که درون محدودههای کلاس قرار دارند، در محدوده والد خود درونخطی نمیشوند.
class C[T]: type Alias = lambda: T
دستورهای آینده دیگر توسط ایمپورتهای نسبی ماژول
__future__فعال نمیشوند؛ به این معنا که دستورهایی به شکلfrom .__future__ import ...اکنون صرفاً ایمپورتهای نسبی استاندارد هستند، بدون فعال شدن هیچ ویژگی خاصی. (مشارکتشده توسط Jeremiah Gabriel Pascual در gh-118216.)اعلانهای
globalاکنون در بلوکهایexceptمجاز هستند، زمانی که آن متغیر سراسری در بلوکelseاستفاده شود. قبلاً این کار یکSyntaxErrorنادرست ایجاد میکرد. (مشارکتشده توسط Irit Katriel در gh-111123.)افزودن
PYTHON_FROZEN_MODULES، متغیر محیطی جدیدی که تعیین میکند آیا ماژولهای فریزشده توسط سازوکار ایمپورت نادیده گرفته شوند یا خیر، و معادل گزینهی خط فرمان-X frozen_modulesاست. (مشارکتشده توسط Yilei Yang در gh-111374.)پشتیبانی از پروفایلگیر perf که بدون اشارهگرهای فریم (frame pointers) کار میکند، از طریق متغیر محیطی جدید
PYTHON_PERF_JIT_SUPPORTو گزینهی خط فرمان-X perf_jitافزوده شد. (ارائهشده توسط پابلو گالیندو در gh-118518.)مکان پروندهی
.python_historyرا میتوان از طریق متغیر محیطی جدیدPYTHON_HISTORYتغییر داد. (مشارکتشده توسط Levi Sabah، Zackery Spytz و Hugo van Kemenade در gh-73965.)کلاسها ویژگی جدید
__static_attributes__دارند. این ویژگی توسط کامپایلر با تاپلی از نامهای ویژگیهای کلاس که از طریقself.<name>از هر تابعی در بدنهی آن انتساب داده میشوند، پر میشود. (مشارکت Irit Katriel در gh-115775.)کامپایلر اکنون ویژگی
__firstlineno__را روی کلاسها ایجاد میکند که مقدار آن شمارهی سطر اول تعریف کلاس است. (با مشارکت Serhiy Storchaka در gh-118465.)توکارهای
exec()وeval()اکنون آرگومانهای globals و locals را بهصورت کلیدواژه میپذیرند. (مشارکتشده توسط Raphael Gaschignard در gh-105879)تابع توکار
compile()اکنون پرچم جدیدast.PyCF_OPTIMIZED_ASTرا میپذیرد که مشابهast.PyCF_ONLY_ASTاست، با این تفاوت که درخت سینتکس انتزاعی (AST) برگرداندهشده مطابق با مقدار آرگومان optimize بهینهسازی میشود. (مشارکتشده توسط Irit Katriel در gh-108113.)افزودن ویژگی
__name__به اشیایproperty. (مشارکتشده توسط Eugene Toder در gh-101860.)افزودن
PythonFinalizationError، استثنای جدیدی که ازRuntimeErrorمشتق شده و برای اعلام زمانی که عملیاتها در طول نهاییسازی مسدود میشوند استفاده میشود. فراخوانیپذیرهای زیر اکنون بهجایRuntimeError،PythonFinalizationErrorرا raise میکنند:(مشارکتشده توسط Victor Stinner در gh-114570.)
اجازه دادن به آرگومان count در
str.replace()تا بهصورت کلیدواژه باشد. (مشارکتشده توسط Hugo van Kemenade در gh-106487.)بسیاری از توابع اکنون اگر مقدار بولی بهعنوان آرگومان توصیفگر پرونده پاس داده شود، هشداری نشان میدهند. این میتواند به گرفتن برخی خطاها در مرحلهی زودتر کمک کند. (ارائهشده توسط سرهی استورچاکا در gh-82626.)
ویژگیهای
nameوmodeبرای اشیاء شبهپروندهی فشرده و بایگانیشده در ماژولهایbz2،lzma،tarfileوzipfileافزوده شد. (مشارکت سرهی استورچاکا در gh-115961.)
ماژولهای جدید¶
dbm.sqlite3: یک بکاند SQLite برایdbm. (با مشارکت Raymond Hettinger و Erlend E. Aasland در gh-100414.)
ماژولهای بهبودیافته¶
argparse¶
افزودن پارامتر deprecated به متدهای
add_argument()وadd_parser()، تا امکان منسوخکردن گزینههای خط فرمان، آرگومانهای جایگاهی و زیرفرمانها فراهم شود. (مشارکتشده توسط سرهی استورچاکا در gh-83648.)
array¶
افزودن کد نوع
'w'(Py_UCS4) برای نویسههای یونیکد. به جای کد نوع منسوخ'u'باید از آن استفاده شود. (مشارکتشده توسط Inada Naoki در gh-80480.)ثبت
array.arrayبهعنوان یکMutableSequenceبا پیادهسازی متدclear(). (ارائهشده توسط Mike Zimin در gh-114894.)
ast¶
سازندههای نوعهای گره در ماژول
astاکنون در آرگومانهایی که میپذیرند سختگیرانهتر هستند و هنگامی که آرگومانها حذف شوند، رفتار شهودیتری دارند.اگر یک فیلد اختیاری روی یک گره AST هنگام ساخت یک نمونه بهعنوان آرگومان گنجانده نشود، آن فیلد اکنون روی
Noneتنظیم خواهد شد. بهطور مشابه، اگر یک فیلد فهرستی حذف شود، آن فیلد اکنون روی یک فهرست خالی تنظیم خواهد شد، و اگر یک فیلدexpr_contextحذف شود، پیشفرض آنLoad()خواهد بود. (پیشتر، در همهی موارد، این ویژگی روی نمونهی گره AST تازهساختهشده وجود نداشت.)در تمام موارد دیگر، هرگاه آرگومان الزامی حذف شود، سازندهی گره یک
DeprecationWarningنشان خواهد داد. این کار در پایتون 3.15 استثنا پرتاب خواهد کرد. بهطور مشابه، ارسال آرگومان کلیدواژهای به سازنده که به فیلدی روی گرهی AST نگاشت نشود، اکنون منسوخ شده است و در پایتون 3.15 استثنا پرتاب خواهد کرد.این تغییرات بر زیرکلاسهای
ast.ASTکه توسط کاربر تعریف شدهاند اعمال نمیشوند، مگر آنکه کلاس با تعریف نگاشتAST._field_typesرفتار جدید را بپذیرد.(مشارکت Jelle Zijlstra در gh-105858، gh-117486 و gh-118851.)
ast.parse()اکنون یک آرگومان اختیاری optimize را میپذیرد که بهcompile()منتقل میشود. این امر امکان به دست آوردن یک AST بهینهشده را فراهم میکند. (مشارکتشده توسط ایریت کاتریل در gh-108113.)
asyncio¶
asyncio.as_completed()اکنون شیئی را برمیگرداند که هم یک پیمایشگر ناهمگام است و هم یک پیمایشگر ساده از انتظارپذیرها. انتظارپذیرهایی که توسط پیمایش ناهمگام تولید میشوند، شامل اشیاء اصلی وظیفه یا آیندهنما هستند که به آن پاس داده شدهاند؛ این امر مرتبط کردن نتایج با وظایف در حال تکمیل را آسانتر میکند. (مشارکتشده توسط Justin Arthur در gh-77714.)asyncio.loop.create_unix_server()اکنون هنگام بسته شدن سرور، سوکت یونیکس را بهطور خودکار حذف میکند. (مشارکتشده توسط Pierre Ossman در gh-111246.)DatagramTransport.sendto()اکنون در صورت فراخوانی با یک شیء بایت خالی، دیتاگرامهایی با طول صفر ارسال میکند. کنترل جریان ترابری نیز اکنون هنگام محاسبه اندازه بافر، سرآیند دیتاگرام را در نظر میگیرد. (مشارکتشده توسط Jamie Phan در gh-115199.)Queue.shutdownوQueueShutDownبرای مدیریت خاتمه صف افزوده شدند. (با مشارکت Laurie Opperman و Yves Duprat در gh-104228.)افزودن متدهای
Server.close_clients()وServer.abort_clients()که یک سرور asyncio را با قاطعیت بیشتری میبندند. (مشارکتشده توسط Pierre Ossman در gh-113538.)پذیرش تاپلی از جداکنندهها در
StreamReader.readuntil()، که هنگام مواجهه با هر یک از آنها متوقف میشود. (مشارکتشده توسط Bruce Merry در gh-81322.)رفتار
TaskGroupهنگامی که یک لغو بیرونی با یک لغو درونی برخورد میکند، بهبود یافت. برای مثال، وقتی دو گروه وظیفه تودرتو هستند و هر دو همزمان در یک وظیفه فرزند دچار استثنا میشوند، ممکن بود گروه وظیفه بیرونی معلق بماند، زیرا لغو درونی آن توسط گروه وظیفه درونی بلعیده میشد.در حالتی که یک گروه وظیفه از بیرون لغو شود و همچنین باید یک
ExceptionGroupرا raise کند، اکنون متدcancel()وظیفهی والد را فراخوانی میکند. این تضمین میکند که یکCancelledErrorدرawaitبعدی raise خواهد شد، تا لغو شدن از دست نرود.یک مزیت اضافی این تغییرات این است که گروههای وظیفه اکنون شمارش لغو را حفظ میکنند (
cancelling()).برای مدیریت برخی حالتهای خاص،
uncancel()اکنون ممکن است پرچم غیرمستند_must_cancelرا هنگامی که شمارش لغو به صفر برسد، بازنشانی کند.(با الهام از مسئلهای که Arthur Tacca در gh-116720 گزارش کرده است.)
وقتی
TaskGroup.create_task()روی یکTaskGroupغیرفعال فراخوانی شود، همروال دادهشده بسته میشود (که از یکRuntimeWarningدربارهی این که همروال دادهشده هرگز await نشده است، جلوگیری میکند). (با مشارکت آرتور تاکا و جیسون ژانگ در gh-115957.)تابع و متدهای
create_taskآرگومان جدید**kwargsرا دریافت کردهاند که به سازندهی وظیفه پاس داده میشود. این تغییر بهطور تصادفی در نسخهی 3.13.3 اضافه شد و قرارداد API را برای کارخانههای وظیفهی سفارشی نقض کرد. چندین کارخانهی وظیفهی شخص ثالث برای این موضوع راهحلهای موقت پیادهسازی کردند. در نسخهی 3.13.4 و نسخههای بعدی، قرارداد قدیمی کارخانه دوباره رعایت میشود (تا نسخهی 3.14). برای اینکه راهحلهای موقت همچنان کار کنند، آرگومان اضافی**kwargsهمچنان اجازه میدهد آرگومانهای کلیدواژهای اضافی بهTaskو به کارخانههای وظیفهی سفارشی پاس داده شوند.این بر تابع و متدهای زیر تأثیر میگذارد:
asyncio.create_task()،asyncio.loop.create_task()،asyncio.TaskGroup.create_task(). (مشارکت از Thomas Grainger در gh-128307.)
base64¶
افزودن توابع
z85encode()وz85decode()برای کدگذاریbytesبهصورت Z85 data و کدگشایی دادههای کدگذاریشده با Z85 بهbytes. (مشارکتشده توسط Matan Perelman در gh-75299.)
compileall¶
تعداد پیشفرض نخهای کارگر و فرایندها اکنون با استفاده از
os.process_cpu_count()به جایos.cpu_count()انتخاب میشود. (با مشارکت Victor Stinner در gh-109649.)
concurrent.futures¶
تعداد پیشفرض نخهای کارگر و فرایندها اکنون با استفاده از
os.process_cpu_count()به جایos.cpu_count()انتخاب میشود. (با مشارکت Victor Stinner در gh-109649.)
configparser¶
ConfigParserاکنون از بخشهای بینام پشتیبانی میکند که امکان استفاده از جفتهای کلید-مقدار در سطح بالا را فراهم میکند. این قابلیت را میتوان با پارامتر جدید allow_unnamed_section فعال کرد. (مشارکتشده توسط Pedro Sousa Lacerda در gh-66449.)
copy¶
تابع جدید
replace()وپروتکل replaceساخت کپیهای تغییریافته از اشیاء را بسیار سادهتر میکنند. این بهویژه هنگام کار با اشیاء تغییرناپذیر مفید است. انواع زیر از تابعreplace()پشتیبانی میکنند و پروتکل replace را پیادهسازی میکنند:هر کلاس تعریفشده توسط کاربر نیز میتواند با تعریف متد
__replace__()ازcopy.replace()پشتیبانی کند. (مشارکتشده توسط Serhiy Storchaka در gh-108751.)
ctypes¶
در نتیجهی بازآرایی داخلی ضروری، مقداردهی اولیه فراکلاسهای داخلی اکنون در
__init__انجام میشود، نه در__new__. این موضوع بر پروژههایی تأثیر میگذارد که برای فراهم کردن مقداردهی اولیه سفارشی، از این فراکلاسهای داخلی زیرکلاس میسازند. بهطور کلی:منطق سفارشیای که در
__new__پس از فراخوانیsuper().__new__انجام میشد، باید به__init__منتقل شود.برای ایجاد یک کلاس، فراکلاس را فراخوانی کنید، نه فقط متد
__new__فراکلاس را.
برای بحث و پیوندهایی به تغییرات در برخی پروژههای متأثر، gh-124520 را ببینید.
اشیاء
ctypes.Structureیک ویژگی جدید_align_دارند که به شما امکان میدهد ترازبندی ساختار هنگام بستهبندی/واگشایی آن به/از حافظه را بهطور صریح مشخص کنید. (مشارکتشده توسط مت سندرسون در gh-112433)
dbm¶
افزودن
dbm.sqlite3، ماژول جدیدی که یک بکاند SQLite را پیادهسازی میکند، و قرار دادن آن بهعنوان بکاند پیشفرضdbm. (مشارکت توسط Raymond Hettinger و Erlend E. Aasland در gh-100414.)امکان حذف تمام آیتمهای پایگاه داده از طریق متدهای جدید
clear()در اشیای پایگاه دادهی GDBM و NDBM فراهم شد. (با مشارکت Donghee Na در gh-107122.)
dis¶
خروجی توابع ماژول
disتغییر کرده است تا بهجای آفستها، برچسبهای منطقی برای مقصدهای پرش (jump targets) و هندلرهای استثنا را نمایش دهد. آفستها را میتوان با گزینهی جدید خط فرمان-Oیا آرگومان show_offsets اضافه کرد. (مشارکتشده توسط ایریت کاتریل در gh-112137.)get_instructions()دیگر ورودیهای نهانگاه را بهصورت دستورهای جداگانه بازنمایی نمیکند. در عوض، آنها را بهعنوان بخشی از کلاسInstruction، در فیلد جدید cache_info برمیگرداند. آرگومان show_caches درget_instructions()منسوخ شده است و دیگر هیچ اثری ندارد. (مشارکتشده توسط ایریت کاتریل در gh-112962.)
doctest¶
خروجی
doctestاکنون بهصورت پیشفرض رنگی است. این را میتوان از طریق متغیر محیطی جدیدPYTHON_COLORSو همچنین متغیرهای محیطی کانونیکالNO_COLORوFORCE_COLORکنترل کرد. همچنین به کنترل رنگ مراجعه کنید. (مشارکتشده توسط Hugo van Kemenade در gh-117225.)متد
DocTestRunner.run()اکنون تعداد آزمونهای نادیدهگرفتهشده را شمارش میکند. ویژگیهایDocTestRunner.skipsوTestResults.skippedافزوده شدند. (مشارکتشده توسط Victor Stinner در gh-108794.)
email¶
سرآیندهای دارای سطرهای جدید تعبیهشده اکنون در خروجی داخل علامت نقلقول قرار میگیرند.
generatorاکنون از سریالسازی (نوشتن) سرآیندهایی که به شکل نامناسب تا شده یا جداسازی شدهاند و در نتیجه بهعنوان چندین سرآیند تجزیه میشوند یا به دادههای مجاور میپیوندند، خودداری میکند. اگر نیاز دارید این ویژگی ایمنی را غیرفعال کنید، مقدارverify_generated_headersرا تنظیم کنید. (مشارکتشده توسط Bas Bloemsaat و Petr Viktorin در gh-121650.)توابع
getaddresses()وparseaddr()اکنون در موقعیتهای بیشتری که با نشانیهای ایمیل نامعتبر مواجه میشوند، بهجای مقادیری که ممکن است نادرست باشند، جفتهای('', '')برمیگردانند. این دو تابع یک پارامتر اختیاری جدید به نام strict دارند (پیشفرضTrue). برای بهدستآوردن رفتار قدیمی (پذیرش ورودی بدشکل)، ازstrict=Falseاستفاده کنید. میتوان ازgetattr(email.utils, 'supports_strict_parsing', False)برای بررسی موجود بودن پارامتر strict استفاده کرد. (مشارکتشده توسط Thomas Dwyer و Victor Stinner برای gh-102988 بهمنظور بهبود رفع مشکل CVE 2023-27043.)
enum¶
fractions¶
اشیاء
Fractionاکنون از قواعد استاندارد زبان کوچک مشخصات قالببندی برای پُرکننده، ترازبندی، مدیریت علامت، عرض کمینه و گروهبندی پشتیبانی میکنند. (مشارکت Mark Dickinson در gh-111320.)
glob¶
افزودن
translate()، تابعی که مشخصات مسیر با وایلدکاردهای به سبک پوسته را به عبارت باقاعده تبدیل میکند. (مشارکتشده توسط بارنی گیل در gh-72904.)
importlib¶
توابع زیر در
importlib.resourcesاکنون با استفاده از چندین آرگومان جایگاهی، امکان دسترسی به یک پوشه (یا درخت) از منابع را میدهند (آرگومانهای encoding و errors در توابع خواندن متن، اکنون فقط کلیدواژهای هستند):این توابع دیگر منسوخ نیستند و برای حذف برنامهریزی نشدهاند. (مشارکتشده توسط Petr Viktorin در gh-116608.)
contents()همچنان به نفع API با امکانات کاملTraversableمنسوخ است. با این حال، اکنون هیچ برنامهای برای حذف آن وجود ندارد. (مشارکتشده توسط Petr Viktorin در gh-116608.)
io¶
اکنون نهاییساز
IOBaseهر خطایی را که توسط متدclose()ایجاد میشود، با استفاده ازsys.unraisablehookگزارشگیری میکند. پیشتر، خطاها بهطور پیشفرض بهصورت بیصدا نادیده گرفته میشدند و تنها در حالت توسعه پایتون یا هنگام استفاده از نسخهی دیباگ پایتون گزارشگیری میشدند. (با مشارکت Victor Stinner در gh-62948.)
ipaddress¶
ویژگی
IPv4Address.ipv6_mappedافزوده شد که نشانی IPv6 نگاشتشده از IPv4 را برمیگرداند. (با مشارکت Charles Machalow در gh-109466.)اصلاح رفتار
is_globalوis_privateدرIPv4Address،IPv6Address،IPv4NetworkوIPv6Network. (مشارکتشده توسط Jakub Stasiak در gh-113171.)
itertools¶
batched()پارامتر جدید strict دارد که اگر دستهی نهایی کوتاهتر از اندازهی دستهی تعیینشده باشد، یکValueErrorایجاد میکند. (مشارکتشده توسط Raymond Hettinger در gh-113202.)
مارشالکردن¶
افزودن پارامتر allow_code در توابع ماژول. با ارسال
allow_code=Falseاز سریالسازی و سریالزدایی اشیاء کدی که بین نسخههای پایتون ناسازگار هستند جلوگیری میشود. (مشارکتشده توسط Serhiy Storchaka در gh-113626.)
math¶
تابع جدید
fma()عملیات ضرب-جمع همجوش (fused multiply-add) را انجام میدهد. این تابعx * y + zرا تنها با یک گرد کردن محاسبه میکند و بدین ترتیب از هرگونه افت دقت میانی جلوگیری میکند. این تابع، تابعfma()ارائهشده توسط C99 را دربر میگیرد و برای حالتهای خاص، از مشخصات عملیات «fusedMultiplyAdd» در IEEE 754 پیروی میکند. (ارائهشده توسط Mark Dickinson و Victor Stinner در gh-73468.)
mimetypes¶
تابع
guess_file_type()برای حدس زدن نوع MIME از روی یک مسیر سامانه فایلبندی اضافه شد. استفاده از مسیرها با تابعguess_type()اکنون soft deprecated است. (مشارکتشده توسط Serhiy Storchaka در gh-66543.)
mmap¶
mmapاکنون در ویندوز در برابر فروپاشی محافظت میشود، وقتی حافظهی نگاشتشده به دلیل خطاهای سامانه فایلبندی یا نقض دسترسی در دسترس نباشد. (مشارکتشده توسط یانیس وایگند در gh-118209.)mmapیک متد جدیدseekable()دارد که میتوان از آن زمانی استفاده کرد که به یک شیء شبهپروندهی مکانیابیپذیر نیاز باشد. متدseek()اکنون موقعیت مطلق جدید را برمیگرداند. (مشارکتشده توسط Donghee Na و Sylvie Liberman در gh-111835.)پارامتر جدید trackfd (فقط برای یونیکس) در
mmapتکثیر توصیفگر پرونده را کنترل میکند؛ اگر نادرست باشد، توصیفگر پروندهای که توسط fileno مشخص شده است تکثیر نخواهد شد. (با مشارکت Zackery Spytz و Petr Viktorin در gh-78502.)
multiprocessing¶
تعداد پیشفرض نخهای کارگر و فرایندها اکنون با استفاده از
os.process_cpu_count()به جایos.cpu_count()انتخاب میشود. (با مشارکت Victor Stinner در gh-109649.)
os¶
افزودن تابع
process_cpu_count()برای بهدستآوردن تعداد هستههای منطقی CPU که توسط نخ فراخوانندهی فرایند جاری قابل استفادهاند. (مشارکتشده توسط Victor Stinner در gh-109649.)cpu_count()وprocess_cpu_count()را میتوان از طریق متغیر محیطی جدیدPYTHON_CPU_COUNTیا گزینهی جدید خط فرمان-X cpu_countبازنویسی کرد. این گزینه برای کاربرانی که نیاز دارند منابع CPU یک سیستم کانتینری را بدون تغییر کد اپلیکیشن یا خودِ کانتینر محدود کنند، مفید است. (مشارکتشده توسط Donghee Na در gh-109595.)افزودن یک رابط سطح پایین به توصیفگرهای پروندهی تایمر لینوکس از طریق
timerfd_create()،timerfd_settime()،timerfd_settime_ns()،timerfd_gettime()،timerfd_gettime_ns()،TFD_NONBLOCK،TFD_CLOEXEC،TFD_TIMER_ABSTIMEوTFD_TIMER_CANCEL_ON_SET(با مشارکت Masaru Tsuchiyama در gh-108277.)lchmod()و آرگومان follow_symlinks درchmod()اکنون هر دو در ویندوز دسترسپذیر هستند. توجه داشته باشید که مقدار پیشفرض follow_symlinks درlchmod()در ویندوزFalseاست. (مشارکتشده توسط Serhiy Storchaka در gh-59616.)fchmod()و پشتیبانی از توصیفگرهای پرونده درchmod()هر دو اکنون در ویندوز در دسترس هستند. (مشارکتشده توسط Serhiy Storchaka در gh-113191.)در ویندوز،
mkdir()وmakedirs()اکنون از عبور دادن مقدار حالت0o700برای اعمال کنترل دسترسی بر پوشهی جدید پشتیبانی میکنند. این بهطور ضمنی برtempfile.mkdtemp()تأثیر میگذارد و یک اقدام کاهشی برای CVE 2024-4030 است. سایر مقادیر حالت همچنان نادیده گرفته میشوند. (مشارکتشده توسط Steve Dower در gh-118486.)posix_spawn()اکنون مقدارNoneرا برای آرگومان env میپذیرد، که باعث میشود فرایند تازه ایجادشده از محیط فرایند فعلی استفاده کند. (با مشارکت Jakub Kulik در gh-113119.)posix_spawn()اکنون میتواند در پلتفرمهایی کهposix_spawn_file_actions_addclosefrom_np()را پشتیبانی میکنند، از ویژگیPOSIX_SPAWN_CLOSEFROMدر پارامتر file_actions استفاده کند. (مشارکت توسط Jakub Kulik در gh-113117.)
os.path¶
افزودن
isreserved()برای بررسی اینکه آیا مسیری در سیستم فعلی رزروشده است. این تابع فقط در ویندوز دسترسپذیر است. (مشارکتشده توسط Barney Gale در gh-88569.)در ویندوز،
isabs()دیگر مسیرهایی که دقیقاً با یک اسلش (\یا/) شروع میشوند را مطلق در نظر نمیگیرد. (مشارکتشده توسط بارنی گیل و جان فاستر در gh-44626.)realpath()اکنون حتی اگر پرونده دسترسپذیر نباشد، نامهای پرونده به سبک MS-DOS را حل میکند. (مشارکتشده توسط Moonsik Park در gh-82367.)
pathlib¶
افزودن
UnsupportedOperationکه بهجایNotImplementedError، زمانی که یک عملیات مسیر پشتیبانی نمیشود، raise میشود. (مشارکت توسط بارنی گیل در gh-89812.)افزودن سازندهی جدید برای ایجاد اشیاء
Pathاز URIهای «file» (file:///)،Path.from_uri(). (با مشارکت Barney Gale در gh-107465.)افزودن
PurePath.full_match()برای تطبیق مسیرها با وایلدکاردهای به سبک پوسته، شامل وایلدکارد بازگشتی "**". (مشارکتشده توسط Barney Gale در gh-73435.)ویژگی کلاس
PurePath.parserبرای نگه داشتن پیادهسازیos.pathکه برای تجزیه و الحاق سطح پایین مسیر استفاده میشود، اضافه شد. این پیادهسازی یاposixpathخواهد بود یاntpath.افزودن آرگومان فقطکلیدواژهای recurse_symlinks به
Path.glob()وrglob(). (به همت بارنی گیل در gh-77609.)Path.glob()وrglob()اکنون هنگام دریافت الگویی که به «**» ختم میشود، پروندهها و پوشهها را برمیگردانند. پیشتر، تنها پوشهها برگردانده میشدند. (مشارکت از سوی Barney Gale در gh-70303.)آرگومان صرفاً کلیدواژهای follow_symlinks به
Path.is_file،Path.is_dir،Path.owner()وPath.group()افزوده شد. (با مشارکت Barney Gale در gh-105793 و Kamil Turek در gh-107962.)
pdb¶
breakpoint()وset_trace()اکنون بلافاصله وارد اشکالزدا میشوند، نه در سطر بعدی کدی که باید اجرا شود. این تغییر باعث میشود اشکالزدا هنگامی کهbreakpoint()در انتهای زمینه قرار گرفته باشد، خارج از زمینه توقف نکند. (مشارکتشده توسط Tian Gao در gh-118579.)sys.path[0]هنگامی کهsys.flags.safe_pathتنظیم شده باشد، دیگر با پوشهی اسکریپتی که در حال اشکالزدایی است جایگزین نمیشود. (مشارکتشده توسط Tian Gao و Christian Walther در gh-111762.)zipappاکنون بهعنوان هدف اشکالزدایی پشتیبانی میشود. (مشارکتشده توسط Tian Gao در gh-118501.)امکان جابهجایی بین استثناهای زنجیرهای هنگام اشکالزدایی پس از خاتمه در
pm()با استفاده از دستور جدیدexceptions [exc_number]برای Pdb اضافه شد. (مشارکتشده توسط Matthias Bussonnier در gh-106676.)عبارتها و دستورهایی که پیشوندشان یک فرمان pdb است، اکنون بهدرستی شناسایی و اجرا میشوند. (مشارکت Tian Gao در gh-108464.)
queue¶
افزودن
Queue.shutdownوShutDownبرای مدیریت خاتمه صف. (مشارکتشده توسط Laurie Opperman و Yves Duprat در gh-104750.)
random¶
افزودن یک رابط خط فرمان. (مشارکتشده توسط Hugo van Kemenade در gh-118131.)
re¶
برای شفافیت بیشتر،
re.errorبهPatternErrorتغییر نام داده شد.re.errorبرای سازگاری با نسخههای پیشین حفظ شده است.
shutil¶
site¶
پروندههای
.pthاکنون ابتدا با استفاده از UTF-8 و سپس، در صورت شکست کدگشایی UTF-8، با locale encoding کدگشایی میشوند. (مشارکتشده توسط Inada Naoki در gh-117802.)
sqlite3¶
اکنون اگر شیء
Connectionبهطور صریحبستهنشده باشد،ResourceWarningمنتشر میشود. (مشارکتشده توسط Erlend E. Aasland در gh-105539.)افزودن پارامتر فقطکلیدواژهای filter به
Connection.iterdump()برای فیلتر کردن اشیاء پایگاه داده جهت برونریزی. (مشارکتشده توسط Mariusz Felisiak در gh-91602.)
ssl¶
API تابع
create_default_context()اکنونVERIFY_X509_PARTIAL_CHAINوVERIFY_X509_STRICTرا در پرچمهای پیشفرض خود در بر میگیرد.توجه
VERIFY_X509_STRICTممکن است گواهیهای پیش از RFC 5280 یا گواهیهای بدشکلی را که پیادهسازی زیربنایی OpenSSL در غیر این صورت ممکن بود بپذیرد، رد کند. اگرچه غیرفعال کردن آن توصیه نمیشود، میتوانید این کار را با استفاده از موارد زیر انجام دهید:import ssl ctx = ssl.create_default_context() ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT
(مشارکتشده توسط William Woodruff در gh-112389.)
statistics¶
kde()برای برآورد چگالی هستهای افزوده شد. این کار امکان برآورد یک تابع چگالی احتمال پیوسته از روی تعداد ثابتی نمونهی گسسته را فراهم میکند. (با مشارکت Raymond Hettinger در gh-115863.)افزودن
kde_random()برای نمونهگیری از یک تابع چگالی احتمال برآوردشده که توسطkde()ایجاد شده است. (مشارکتشده توسط Raymond Hettinger در gh-115863.)
subprocess¶
ماژول
subprocessاکنون در موقعیتهای بیشتر از تابعposix_spawn()استفاده میکند.شایان ذکر است که وقتی close_fds برابر
Trueباشد (پیشفرض)، در صورتی که کتابخانهی C تابعposix_spawn_file_actions_addclosefrom_np()را ارائه کند، ازposix_spawn()استفاده خواهد شد؛ این تابع در نسخههای اخیر لینوکس، FreeBSD و Solaris موجود است. در لینوکس، این باید مشابه کد مبتنی برvfork()موجود در لینوکس عمل کند.در صورتی که نیاز داشته باشید
subprocessرا مجبور کنید که هرگز ازposix_spawn()استفاده نکند، میتوانید یک تنظیمکنندهی کنترلی خصوصی به نامsubprocess._USE_POSIX_SPAWNرا رویFalseقرار دهید. لطفاً در صورت تنظیم این مورد، دلیل و جزئیات پلتفرم خود را در issue tracker گزارش دهید تا بتوانیم منطق انتخاب API خود را برای همه بهبود ببخشیم. (مشارکتشده توسط یاکوب کولیک در gh-113117.)
sys¶
تابع
_is_interned()برای آزمودن اینکه آیا یک رشته درونسازی (intern) شده است، اضافه شد. وجود این تابع در تمام پیادهسازیهای پایتون تضمین نمیشود. (با مشارکت Serhiy Storchaka در gh-78573.)
tempfile¶
در ویندوز، حالت پیشفرض
0o700که توسطtempfile.mkdtemp()استفاده میشود، اکنون به دلیل تغییرات اعمالشده درos.mkdir()، دسترسی به پوشهی جدید را محدود میکند. این یک اقدام کاهشی برای CVE 2024-4030 است. (مشارکتشده توسط Steve Dower در gh-118486.)
time¶
در ویندوز،
monotonic()اکنون از ساعتQueryPerformanceCounter()با وضوح ۱ میکروثانیه استفاده میکند، بهجای ساعتGetTickCount64()که وضوح آن ۱۵٫۶ میلیثانیه است. (مشارکتشده توسط Victor Stinner در gh-88494.)در ویندوز،
time()اکنون از ساعتGetSystemTimePreciseAsFileTime()با وضوح ۱ میکروثانیه استفاده میکند، بهجای ساعتGetSystemTimeAsFileTime()که وضوح ۱۵٫۶ میلیثانیه دارد. (مشارکتشده توسط Victor Stinner در gh-63207.)
tkinter¶
افزودن متدهای ابزارک
tkinter:tk_busy_hold()،tk_busy_configure()،tk_busy_cget()،tk_busy_forget()،tk_busy_current()وtk_busy_status(). (مشارکت Miguel، klappnase و Serhiy Storchaka در gh-72684.)متد ابزارک
tkinterبه نامwm_attributes()اکنون نام ویژگی را بدون پیشوند منفی برای دریافت ویژگیهای پنجره میپذیرد، برای مثالw.wm_attributes('alpha')، و به شما اجازه میدهد ویژگیها و مقادیری را که باید تنظیم شوند، بهصورت آرگومانهای کلیدواژهای مشخص کنید، برای مثالw.wm_attributes(alpha=0.5). (مشارکتشده توسط Serhiy Storchaka در gh-43457.)wm_attributes()اکنون میتواند ویژگیها را با استفاده از پارامتر جدید و اختیاریِ فقطکلیدواژهای return_python_dict، بهصورت یکdictبازگرداند. (مشارکتشده توسط Serhiy Storchaka در gh-43457.)Text.count()اکنون میتواند هنگام استفاده از پارامتر جدید فقطکلیدواژهای و اختیاری return_ints، یکintساده برگرداند. در غیر این صورت، تعداد به صورت یک تاپل تکعضوی یاNoneبرگردانده میشود. (مشارکتشده توسط Serhiy Storchaka در gh-97928.)پشتیبانی از نوع المان "vsapi" در متد
element_create()از کلاسtkinter.ttk.Style. (مشارکتشده توسط Serhiy Storchaka در gh-68166.)افزودن متد
after_info()برای ابزارکهای Tkinter. (مشارکتشده توسط Cheryl Sabella در gh-77020.)متد جدید
copy_replace()بهPhotoImageاضافه شد تا ناحیهای را از یک تصویر به تصویری دیگر، با امکان بزرگنمایی پیکسلی، زیرنمونهگیری (subsampling) یا هر دو، کپی کند. (مشارکتشده توسط Serhiy Storchaka در gh-118225.)افزودن پارامتر from_coords به متدهای
copy()،zoom()وsubsample()ازPhotoImage. افزودن پارامترهای zoom و subsample به متدcopy()ازPhotoImage. (مشارکتشده توسط Serhiy Storchaka در gh-118225.)متدهای
read()برای خواندن تصویر از یک پرونده وdata()برای دریافت دادههای تصویر به کلاسPhotoImageاضافه شدند. پارامترهای background و grayscale به متدwrite()اضافه شدند. (مشارکتشده توسط Serhiy Storchaka در gh-118271.)
traceback¶
ویژگی
exc_type_strبهTracebackExceptionاضافه شد که نمایش رشتهای از exc_type را نگه میدارد. ویژگیexc_typeکه خودِ شیء نوع را نگه میدارد، منسوخ اعلام شد. پارامتر save_exc_type (پیشفرضTrue) اضافه شد تا مشخص کند که آیاexc_typeباید ذخیره شود یا خیر. (مشارکتشده توسط Irit Katriel در gh-112332.)پارامتر جدید فقطکلیدواژهای show_group به
TracebackException.format_exception_only()اضافه شد تا استثناهای تودرتوی یک نمونهیBaseExceptionGroupرا (بهصورت بازگشتی) قالببندی کند. (مشارکتشده توسط Irit Katriel در gh-105292.)
types¶
SimpleNamespaceاکنون میتواند یک آرگومان جایگاهی واحد برای مقداردهی اولیه آرگومانهای فضای نام بپذیرد. این آرگومان باید یا یک نگاشت یا یک پیمایشپذیر از جفتهای کلید-مقدار باشد. (مشارکتشده توسط Serhiy Storchaka در gh-108191.)
typing¶
PEP 705: افزودن
ReadOnly، یک سازهی تایپینگ ویژه به منظور علامتگذاری یک آیتمTypedDictبه عنوان فقطخواندنی برای بررسیگرهای نوع.PEP 742: افزودن
TypeIs، یک سازهی تایپینگ که میتوان از آن برای راهنمایی یک بررسیگر نوع در نحوهی محدودسازی نوع استفاده کرد.افزودن
NoDefault، شیء نشانگری که برای نمایش مقادیر پیشفرض برخی پارامترها در ماژولtypingاستفاده میشود. (مشارکتشده توسط Jelle Zijlstra در gh-116126.)افزودن
get_protocol_members()برای بازگرداندن مجموعهی اعضایی که یکtyping.Protocolرا تعریف میکنند. (مشارکتشده توسط Jelle Zijlstra در gh-104873.)تابع
is_protocol()برای بررسی اینکه آیا یک کلاس یکProtocolاست یا خیر، اضافه شد. (مشارکتشده توسط Jelle Zijlstra در gh-104873.)ClassVarاکنون میتواند درFinalتودرتو شود و برعکس. (مشارکتشده توسط Mehdi Drissi در gh-89547.)
unicodedata¶
پایگاه دادهی یونیکد به نسخه 15.1.0 بهروزرسانی شد. (مشارکتشده توسط جیمز جریتی در gh-109559.)
venv¶
افزودن پشتیبانی از ایجاد پروندههای نادیدهگیری (ignore) مربوط به مدیریت کنترل نسخه (SCM) در پوشهی محیط مجازی. بهطور پیشفرض، از Git پشتیبانی میشود. این قابلیت از طریق API بهصورت فعالسازی اختیاری (opt-in) پیادهسازی شده و میتوان آن را برای پشتیبانی از SCMهای دیگر گسترش داد (
EnvBuilderوcreate())؛ همچنین از طریق CLI با استفاده از--without-scm-ignore-filesمیتوان از آن صرفنظر کرد (opt-out). (مشارکتشده توسط Brett Cannon در gh-108125.)
warnings¶
PEP 702: دکوراتور جدید
warnings.deprecated()راهی برای اطلاعرسانی منسوخشدگیها به static type checker و هشدار دادن هنگام استفاده از کلاسها و توابع منسوخ فراهم میکند. همچنین ممکن است هنگام استفاده از یک تابع یا کلاس دکوراتورشده در زمان اجرا، یکDeprecationWarningمنتشر شود. (مشارکتشده توسط Jelle Zijlstra در gh-104003.)
xml¶
امکان کنترل تعویق بازتجزیه (reparse deferral) در Expat >=2.6.0 (CVE 2023-52425) با افزودن پنج متد جدید فراهم شد:
xml.sax.expatreader.ExpatParser.flush()
(مشارکت Sebastian Pipping در gh-115623.)
متد
close()برای پاکسازی صریح به پیمایشگری که توسطiterparse()بازگردانده میشود، افزوده شد. (مشارکت Serhiy Storchaka در gh-69893.)
zipimport¶
بهینهسازیها¶
زمان ایمپورت چندین ماژول از کتابخانه استاندارد بهطور چشمگیری بهبود یافته است. برای مثال، زمان ایمپورت ماژول
typingبا حذف وابستگیهای آن بهreوcontextlibحدود یکسوم کاهش یافته است. ماژولهای دیگری که از افزایش سرعت زمان ایمپورت بهرهمند شدهاند عبارتاند ازemail.utils،enum،functools،importlib.metadataوthreading. (مشارکتشده توسط Alex Waygood، Shantanu Jain، Adam Turner، Daniel Hollas و دیگران در gh-109653.)textwrap.indent()اکنون برای ورودیهای بزرگ حدود ۳۰ درصد سریعتر از قبل است. (مشارکتشده توسط Inada Naoki در gh-107369.)ماژول
subprocessاکنون در موقعیتهای بیشتری از تابعposix_spawn()استفاده میکند، از جمله زمانی که close_fds در بسیاری از پلتفرمهای مدرن برابرTrue(مقدار پیشفرض) است. این امر باید هنگام راهاندازی فرایندها روی FreeBSD و Solaris، افزایش عملکرد قابل توجهی به همراه داشته باشد. برای جزئیات، به بخش subprocess در بالا مراجعه کنید. (مشارکتشده توسط Jakub Kulik در gh-113117.)
ماژولها و APIهای حذفشده¶
PEP 594: حذف «باتریهای مرده» از کتابخانه استاندارد¶
PEP 594 حذف ۱۹ ماژول از کتابخانه استاندارد را پیشنهاد کرد؛ این ماژولها به دلیل تاریخی، از رده خارج یا ناامن بودن، بهطور محاورهای «باتریهای مرده» (dead batteries) نامیده میشوند. تمام ماژولهای زیر در پایتون 3.11 منسوخ شدند و اکنون حذف شدهاند:
aifcstandard-aifc: از بازتوزیع کتابخانهی
aifcدر PyPI استفاده کنید.
audioopaudioop-lts: از کتابخانهی
audioop-ltsاز PyPI استفاده کنید.
chunkstandard-chunk: استفاده از بازتوزیع کتابخانهی
chunkاز PyPI.
cgiوcgitbcgi.FieldStorageرا معمولاً میتوان باurllib.parse.parse_qsl()برای درخواستهایGETوHEADجایگزین کرد و برای درخواستهایPOSTوPUTبا ماژولemail.messageیا کتابخانهی multipart.cgi.parse()را میتوان با فراخوانی مستقیمurllib.parse.parse_qs()روی رشته پرسوجوی موردنظر جایگزین کرد، مگر آنکه ورودیmultipart/form-dataباشد، که در این صورت باید مطابق توضیح دادهشده در زیر برایcgi.parse_multipart()جایگزین شود.cgi.parse_header()را میتوان با کارکرد موجود در بستهیemailجایگزین کرد؛ این بسته همان RFCهای MIME را پیادهسازی میکند. برای مثال، باemail.message.EmailMessage:from email.message import EmailMessage msg = EmailMessage() msg['content-type'] = 'application/json; charset="utf8"' main, params = msg.get_content_type(), msg['content-type'].params
cgi.parse_multipart()را میتوان با قابلیتهای موجود در بستهیemail، که همان RFCهای MIME را پیادهسازی میکند، یا با کتابخانهی multipart جایگزین کرد. برای مثال، کلاسهایemail.message.EmailMessageوemail.message.Message.standard-cgi: و standard-cgitb: از بازتوزیع کتابخانههای
cgiوcgitbدر PyPI استفاده کنید.
cryptو ماژول توسعهای خصوصی_crypt. ماژولhashlibممکن است زمانی که صرفاً هشکردن یک مقدار مورد نیاز است، جایگزین مناسبی باشد. در غیر این صورت، کتابخانههای شخص ثالث گوناگونی در PyPI در دسترس هستند:bcrypt: هشسازی مدرن گذرواژه برای نرمافزار و سرورهای شما.
argon2-cffi: الگوریتم امن هشکردن گذرواژه Argon2.
legacycrypt: پوششی مبتنی بر
ctypesبرای فراخوانی کتابخانهای crypt در POSIX و کارکردهای مرتبط.crypt_r: انشعابی از ماژول
crypt، پوششی برای فراخوانی کتابخانهای crypt_r(3) و قابلیتهای مرتبط.standard-crypt و deprecated-crypt-alternative: از بازتوزیع کتابخانهی
cryptو پیادهسازی مجدد کتابخانهی_cryptاز PyPI استفاده کنید.
imghdr: باید از کتابخانههای filetype، puremagic یا python-magic بهعنوان جایگزین استفاده شود. برای مثال، تابعpuremagic.what()میتواند برای همهی قالبهای پروندهای که توسطimghdrپشتیبانی میشدند، جایگزین تابعimghdr.what()شود.standard-imghdr: استفاده از بازتوزیع کتابخانهی
imghdrاز PyPI.
mailcap: بهجای آن از ماژولmimetypesاستفاده کنید.standard-mailcap: از بازتوزیع کتابخانهی
mailcapدر PyPI استفاده کنید.
msilibnisnntplib: به جای آن از کتابخانهی pynntp در PyPI استفاده کنید.standard-nntplib: از بازتوزیع کتابخانهی
nntplibموجود در PyPI استفاده کنید.
ossaudiodev: برای پخش صدا، بهجای آن از کتابخانهی pygame از PyPI استفاده کنید.pipes: به جای آن از ماژولsubprocessاستفاده کنید. برای جایگزینی تابع مستندنشدهیpipes.quoteازshlex.quote()استفاده کنید.standard-pipes: استفاده از بازتوزیع کتابخانهی
pipesاز PyPI.
sndhdr: کتابخانههای filetype، puremagic یا python-magic باید بهعنوان جایگزین استفاده شوند.standard-sndhdr: از بازتوزیع کتابخانهی
sndhdrاز PyPI استفاده کنید.
spwd: بهجای آن، از کتابخانهی python-pam در PyPI استفاده کنید.sunaustandard-sunau: از بازتوزیع کتابخانهی
sunauاز PyPI استفاده کنید.
telnetlib، به جای آن از کتابخانههای telnetlib3 یا Exscript موجود در PyPI استفاده کنید.standard-telnetlib: از بازتوزیع کتابخانهی
telnetlibاز PyPI استفاده کنید.
uu: به جای آن، از ماژولbase64به عنوان یک جایگزین مدرن استفاده کنید.standard-uu: از بازتوزیع کتابخانهی
uuدر PyPI استفاده کنید.
xdrlibstandard-xdrlib: از بازتوزیع کتابخانهی
xdrlibاز PyPI استفاده کنید.
(با مشارکت ویکتور استینر و زاکری ور در gh-104773 و gh-104780.)
2to3¶
برنامه 2to3 و ماژول
lib2to3که پیشتر در پایتون 3.11 منسوخ شده بودند، حذف شدند. (مشارکتشده توسط Victor Stinner در gh-104780.)
builtins¶
پشتیبانی از توصیفگرهای زنجیرهای
classmethodحذف شد (که در gh-63272 معرفی شده بودند). از این توصیفگرها دیگر نمیتوان برای دربرگرفتن توصیفگرهای دیگر، مانندproperty، استفاده کرد. طراحی اصلی این قابلیت معیوب بود و به چندین مشکل منجر شد. برای «عبور» (pass-through) از یکclassmethod، استفاده از ویژگی__wrapped__را در نظر بگیرید که در پایتون 3.10 افزوده شد. (مشارکتشده توسط Raymond Hettinger در gh-89519.)هنگام فراخوانی
frame.clear()بر روی یک فریم معلق، یکRuntimeErrorایجاد میشود (همانطور که همیشه برای یک فریم در حال اجرا چنین بوده است). (مشارکت Irit Katriel در gh-79932.)
configparser¶
کلاس بدون مستندات
LegacyInterpolationکه در رشته مستند از پایتون 3.2 و در زمان اجرا از پایتون 3.11 منسوخ شده بود، حذف شد. (مشارکتشده توسط هوگو ون کمِناده در gh-104886.)
importlib.metadata¶
حذف دسترسی زیرنویسی منسوخ (
__getitem__()) برای اشیاء EntryPoint. (با مشارکت Jason R. Coombs در gh-113175.)
locale¶
تابع
locale.resetlocale()که در پایتون 3.11 منسوخ شده بود، حذف شد. به جای آن ازlocale.setlocale(locale.LC_ALL, "")استفاده کنید. (مشارکتشده توسط Victor Stinner در gh-104783.)
آپکد¶
opcode.ENABLE_SPECIALIZATIONبه_opcode.ENABLE_SPECIALIZATIONمنتقل شد. این فیلد در 3.12 افزوده شد، هرگز مستند نشد و برای استفادهی بیرونی در نظر گرفته نشده است. (مشارکتشده توسط Irit Katriel در gh-105481.)حذف
opcode.is_pseudo()،opcode.MIN_PSEUDO_OPCODEوopcode.MAX_PSEUDO_OPCODEکه در پایتون 3.12 اضافهشده بودند، اما نه مستندشده بودند و نه از طریقdisدر دسترس قرار گرفته بودند، و برای استفادهی خارجی در نظر گرفته نشده بودند. (مشارکتشده توسط Irit Katriel در gh-105481.)
optparse¶
این ماژول دیگر منسوخِ نرم (soft deprecated) در نظر گرفته نمیشود. هرچند
argparseهمچنان گزینهی ترجیحی برای پروژههای جدیدی است که از کتابخانهی شخص ثالث برای پردازش آرگومانهای خط فرمان استفاده نمیکنند، جنبههایی از نحوهی کارکردargparseوجود دارد که به این معناست که ماژول سطح پایینترoptparseممکن است برای نوشتن کتابخانههای پردازش آرگومان، و برای پیادهسازی برنامههای خط فرمانی که سختگیرانهتر ازargparseبه قراردادهای گوناگون پردازش خط فرمان یونیکس (که ریشه در رفتار تابعgetopt()زبان C دارند) پایبند هستند، پایهی بهتری فراهم کند. (مشارکتشده توسط Alyssa Coghlan و Serhiy Storchaka در gh-126180.)
pathlib¶
re¶
تابع مستندنشده، منسوخ و خراب
re.template()و پرچمre.TEMPLATE/re.Tحذف شدند. (مشارکتشده توسط Serhiy Storchaka و Nikita Sobolev در gh-105687.)
tkinter.tix¶
حذف ماژول
tkinter.tixکه در پایتون 3.6 منسوخ شده بود. کتابخانهی شخص ثالث Tix که این ماژول آن را پوشش میداد، نگهداری نمیشود. (نوشتهشده توسط Zachary Ware در gh-75552.)
turtle¶
حذف متد
RawTurtle.settiltangle()که در مستندات از پایتون 3.1 و در زمان اجرا از پایتون 3.11 منسوخ شده بود. (مشارکت هوگو ون کمناده در gh-104876.)
typing¶
فضاهای نام
typing.ioوtyping.reکه از پایتون 3.8 منسوخ شده بودند، حذف شدند. آیتمهای موجود در آن فضاهای نام را میتوان مستقیماً از ماژولtypingایمپورت کرد. (مشارکتشده توسط سباستین ریتاو در gh-92871.)روش ایجاد نوعهای
TypedDictبا آرگومانهای کلیدواژهای، که در پایتون 3.11 منسوخ شده بود، حذف شد. (مشارکت Tomas Roun در gh-104786.)
unittest¶
حذف توابع زیر از
unittestکه در پایتون 3.11 منسوخ شدهاند:unittest.findTestCases()unittest.makeSuite()unittest.getTestCaseNames()
بهجای آن از متدهای
TestLoaderاستفاده کنید:(مشارکتشده توسط هوگو ون کمِناده در gh-104835.)
متد آزموننشده و بدون مستندات
TestProgram.usageExit()که در پایتون 3.11 منسوخ شده بود، حذف شد. (مشارکت توسط Hugo van Kemenade در gh-104992.)
urllib¶
پارامترهای cafile، capath و cadefault تابع
urllib.request.urlopen()که در پایتون 3.6 منسوخ شده بودند، حذف شدند. بهجای آنها از پارامتر context همراه با یک نمونهیSSLContextاستفاده کنید. میتوان از تابعssl.SSLContext.load_cert_chain()برای بارگذاری گواهیهای خاص استفاده کرد، یا اجازه دهیدssl.create_default_context()گواهیهای مرجع صدور گواهی (CA) مورد اعتماد سیستمعامل را انتخاب کند. (با مشارکت Victor Stinner در gh-105382.)
webbrowser¶
کلاس
MacOSXکه آزموننشده و مستندنشده بود و در پایتون 3.11 منسوخ شده بود، حذف شد. به جای آن، از کلاسMacOSXOSAScript(معرفیشده در پایتون 3.2) استفاده کنید. (مشارکتشده توسط Hugo van Kemenade در gh-104804.)ویژگی منسوخ
MacOSXOSAScript._nameحذف شد. بهجای آن از ویژگیMacOSXOSAScript.nameاستفاده کنید. (مشارکتشده توسط نیکیتا سوبولف در gh-105546.)
منسوخشدگیهای جدید¶
-
تابع مستندنشدهی
SetPointerType()منسوخ شد که در پایتون 3.15 حذف خواهد شد. (مشارکتشده توسط ویکتور استینر در gh-105733.)تابع
ARRAY()به نفع ضربtype * lengthمنسوخسازی نرم شد. (مشارکتشده توسط Victor Stinner در gh-105733.)
dis:-
منسوخ کردن اعداد غیرصحیح بهعنوان آرگومان برای توابع و متدهای ماژول
gettextکه شکلهای جمع را در نظر میگیرند، حتی اگر هیچ ترجمهای یافت نشده باشد. (مشارکت Serhiy Storchaka در gh-88434.)
glob:توابع مستندنشدهی
glob0()وglob1()منسوخ شدند. بهجای آنها ازglob()استفاده کنید و یک شیء شبهمسیر که پوشهی ریشه را مشخص میکند، به پارامتر root_dir بدهید. (مشارکتشده توسط Barney Gale در gh-117337.)
-
کلاس
CGIHTTPRequestHandlerمنسوخ شد و در پایتون 3.15 حذف خواهد شد. سرورهای HTTP CGI مبتنی بر فرایند مدتهاست از مد افتادهاند. این کد قدیمی بود، نگهداری نمیشد و بهندرت استفاده میشد. این کد پتانسیل بالایی برای باگهای امنیتی و کارکردی دارد. (مشارکتشده توسط Gregory P. Smith در gh-109096.)پرچم
--cgiدر رابط خط فرمان python -m http.server منسوخ شد و در پایتون 3.15 حذف خواهد شد. (مشارکتشده توسط گرگوری پی. اسمیت در gh-109096.)
-
منسوخسازی نرم آرگومانهای مسیر پرونده در
guess_type()؛ بهجای آن ازguess_file_type()استفاده کنید. (مشارکتشده توسط Serhiy Storchaka در gh-66543.)
re:ارسال آرگومانهای اختیاری maxsplit، count یا flags بهصورت آرگومانهای جایگاهی به توابع در سطح ماژول
split()،sub()وsubn()منسوخ شد. این پارامترها در نسخهی آیندهی پایتون فقط کلیدواژهای خواهند شد. (مشارکتشده توسط Serhiy Storchaka در gh-56166.)
-
متد
PurePath.is_reserved()منسوخ شد و در پایتون 3.15 حذف خواهد شد. برای تشخیص مسیرهای رزروشده در ویندوز ازos.path.isreserved()استفاده کنید. (مشارکتشده توسط Barney Gale در gh-88569.)
-
تابع
java_ver()منسوخ شد و در پایتون 3.15 حذف خواهد شد. این تابع فقط برای پشتیبانی از Jython مفید است، API گیجکنندهای دارد و عمدتاً آزموننشده است. (مشارکت Nikita Sobolev در gh-116349.)
-
تابع مستندنشدهی
ispackage()منسوخ شد. (مشارکتشده توسط Zackery Spytz در gh-64020.)
-
منسوخکردن ارسال بیش از یک آرگومان جایگاهی به تابع
connect()و سازندهیConnection. پارامترهای باقیمانده در پایتون 3.15 فقط کلیدواژهای خواهند شد. (مشارکتشده توسط ارلند ای. آسلند در gh-107948.)منسوخ شدن ارسال نام، تعداد آرگومانها و فراخوانیپذیر بهعنوان آرگومانهای کلیدواژهای برای
Connection.create_function()وConnection.create_aggregate(). این پارامترها در پایتون 3.15 فقط جایگاهی خواهند شد. (مشارکت: Erlend E. Aasland در gh-108278.)ارسال کالبک فراخوانیپذیر بهصورت کلیدواژهای برای متدهای
set_authorizer()،set_progress_handler()وset_trace_callback()درConnectionمنسوخ شد. کالبکهای فراخوانیپذیر در پایتون 3.15 فقطجایگاهی خواهند شد. (نوشتهشده توسط Erlend E. Aasland در gh-108278.)
sys:تابع
_enablelegacywindowsfsencoding()منسوخ شده است و در پایتون 3.16 حذف خواهد شد. به جای آن از متغیر محیطیPYTHONLEGACYWINDOWSFSENCODINGاستفاده کنید. (مشارکتشده توسط Inada Naoki در gh-73427.)
-
ویژگی مستندنشده و استفادهنشدهی
TarFile.tarfileمنسوخ شد و در پایتون 3.16 حذف خواهد شد. (مشارکتشده در gh-115256.)
-
ویژگی
TracebackException.exc_typeمنسوخ شد. به جای آن ازTracebackException.exc_type_strاستفاده کنید. (مشارکتشده توسط Irit Katriel در gh-112332.)
-
سینتکس مستندنشدهی آرگومان کلیدواژهای برای ایجاد کلاسهای
NamedTuple(مثلاًPoint = NamedTuple("Point", x=int, y=int)) منسوخ شد و در پایتون 3.15 حذف خواهد شد. بهجای آن از سینتکس مبتنی بر کلاس یا سینتکس تابعی استفاده کنید. (مشارکتشده توسط Alex Waygood در gh-105566.)استفادهنکردن از پارامتر fields هنگام ایجاد کلاس
NamedTupleیاtyping.TypedDictمنسوخ شد، و ارسالNoneبه پارامتر fields هر دو نوع نیز منسوخ شد. پایتون 3.15 برای پارامتر fields یک دنباله معتبر را الزامی خواهد کرد. برای ایجاد یک کلاس NamedTuple بدون هیچ فیلدی، ازclass NT(NamedTuple): passیاNT = NamedTuple("NT", ())استفاده کنید. برای ایجاد یک کلاس TypedDict بدون هیچ فیلدی، ازclass TD(TypedDict): passیاTD = TypedDict("TD", {})استفاده کنید. (مشارکتشده توسط Alex Waygood در gh-105566 و gh-105570.)تابع دکوراتور
@typing.no_type_check_decoratorمنسوخ میشود و در Python 3.15 حذف خواهد شد. پس از هشت سال حضور در ماژولtyping، هنوز هیچ بررسیگر نوع بزرگی از آن پشتیبانی نکرده است. (مشارکتشده توسط Alex Waygood در gh-106309.)typing.AnyStrمنسوخ اعلام شد. در پایتون 3.16، ازtyping.__all__حذف خواهد شد و هنگام ایمپورت یا دسترسی به آن، یکDeprecationWarningدر زمان اجرا نشان داده خواهد شد. در پایتون 3.18 بهطور کامل حذف خواهد شد. بهجای آن از سینتکس پارامتر نوع جدید استفاده کنید. (مشارکتشده توسط Michael The در gh-107116.)
wave:متدهای
getmark()،setmark()وgetmarkers()از کلاسهایWave_readوWave_writeمنسوخ شدند و در پایتون 3.15 حذف خواهند شد. (مشارکتشده توسط Victor Stinner در gh-105096.)
در پایتون 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از عملیات کپی، deepcopy و پیکل پشتیبانی مستندنشده، ناکارآمد، بهطور تاریخی دارای اشکال و ناسازگار داشت. این پشتیبانی در نسخهی 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 حذف شود. (با مشارکت نیکیتا سوبولف در gh-101866.)
-
سینتکس آرگومان کلیدواژهایِ مستندنشده برای ایجاد کلاسهای
NamedTuple(برای مثال،Point = NamedTuple("Point", x=int, y=int)) از پایتون 3.13 منسوخ شده است. به جای آن از سینتکس مبتنی بر کلاس یا سینتکس تابعی استفاده کنید.هنگام استفاده از سینتکس تابعی
TypedDict، عدم ارسال مقدار به پارامتر 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، هنوز هیچیک از بررسیگرهای نوع اصلی آن را پشتیبانی نکردهاند.
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()استفاده کنید. (مشارکتشده توسط Jiahao Li و Kumar Aditya در 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میشوند. (مشارکتشده توسط Hugo van Kemenade در 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 منسوخ شده است.
در انتظار حذف در پایتون 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.)
در انتظار حذف در پایتون 3.18¶
در انتظار حذف در پایتون 3.19¶
در انتظار حذف در نسخههای آینده¶
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: اکنون قواعد سختگیرانهتری برای ارجاعهای عددی به گروهها و نام گروهها در عبارات باقاعده اعمال میشود. اکنون فقط دنبالهای از ارقام اسکی بهعنوان ارجاع عددی پذیرفته میشود. نام گروه در الگوهای بایتی و رشتههای جایگزین اکنون فقط میتواند شامل حروف و ارقام اسکی و زیرخط باشد. (مشارکتشده توسط 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استفاده نمیشود. برای حفظ سازگاری با کاربرانی که از این کلاس خصوصی استفاده میکنند، یک شیم سازگاری (compatibility 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()نباید نوشتن ناقص (partial write) انجام دهد.xml.etree.ElementTree: آزمودن ارزش صدق یکElementمنسوخ شده است. در نسخهای در آینده، این آزمون همیشهTrueرا برمیگرداند. بهجای آن، آزمونهای صریحlen(elem)یاelem is not Noneرا ترجیح دهید.sys._clear_type_cache()منسوخ شده است: به جای آن ازsys._clear_internal_caches()استفاده کنید.
تغییرات بایتکد سیپایتون¶
آرگومان آپکد (oparg)
YIELD_VALUEاکنون در صورتی که yield بخشی از یک yield-from یا await باشد1است و در غیر این صورت0. opargRESUMEتغییر یافت تا بیتی به آن اضافه شود که نشان میدهد عمق استثنا (except-depth) برابر با ۱ است یا خیر؛ این بیت برای بهینهسازی بستن تولیدگرها لازم است. (مشارکت Irit Katriel در gh-111354.)
تغییرات API زبان C¶
ویژگیهای جدید¶
افزودن PyMonitoring C API برای تولید رویدادهای پایشِ PEP 669:
PyMonitoring_FireBranchEvent
(مشارکتشده توسط Irit Katriel در gh-111997.)
افزودن
PyMutex، یک قفل متقابل سبک که تنها یک بایت فضا اشغال میکند، و توابع جدیدPyMutex_Lock()وPyMutex_Unlock(). تابعPyMutex_Lock()در صورتی که عملیات نیاز به مسدود شدن داشته باشد، قفل مفسر سراسری را آزاد میکند (اگر در حال حاضر در اختیار داشته باشد). (مشارکتشده توسط Sam Gross در gh-108724.)افزودن PyTime C API برای فراهم کردن دسترسی به ساعتهای سیستم:
(مشارکتشده توسط Victor Stinner و Petr Viktorin در gh-110850.)
تابع
PyDict_ContainsString()با همان رفتار تابعPyDict_Contains()اضافه شد، اما key بهعنوان یک رشته بایتی کدگذاریشده با UTF-8 از نوع const char* مشخص میشود، نه PyObject*. (مشارکتشده توسط Victor Stinner در gh-108314.)توابع
PyDict_GetItemRef()وPyDict_GetItemStringRef()اضافه شدند که رفتاری مشابهPyDict_GetItemWithError()دارند، اما بهجای ارجاع امانتی یک ارجاع قوی برمیگردانند. علاوه بر این، این توابع در صورت خطا-1برمیگردانند و دیگر نیازی به بررسیPyErr_Occurred()نیست. (مشارکتشده توسط Victor Stinner در gh-106004.)تابع
PyDict_SetDefaultRef()افزوده شد که رفتاری مشابهPyDict_SetDefault()دارد، اما بهجای ارجاع امانتی، یک ارجاع قوی برمیگرداند. این تابع در صورت خطا-1، هنگام درج0و در صورتی که کلید از قبل در دیکشنری وجود داشته باشد1برمیگرداند. (مشارکتشده توسط Sam Gross در gh-112066.)توابع
PyDict_Pop()وPyDict_PopString()برای حذف یک کلید از دیکشنری و بهطور اختیاری بازگرداندن مقدار حذفشده اضافه شدند. این توابع مشابهdict.pop()هستند، هرچند مقدار پیشفرضی وجود ندارد وKeyErrorبرای کلیدهای مفقود پرتاب نمیشود. (مشارکتشده توسط Stefan Behnel و Victor Stinner در gh-111262.)توابع
PyMapping_GetOptionalItem()وPyMapping_GetOptionalItemString()به ترتیب به عنوان جایگزینهایی برایPyObject_GetItem()وPyMapping_GetItemString()اضافه شدند. توابع جدید در صورتی که کلید درخواستشده در نگاشت موجود نباشد، استثنایKeyErrorرا ایجاد نمیکنند. در صورتی که نبود یک کلید نباید به عنوان شکست در نظر گرفته شود، این گونهها راحتتر و سریعتر هستند. (مشارکتشده توسط Serhiy Storchaka در gh-106307.)توابع
PyObject_GetOptionalAttr()وPyObject_GetOptionalAttrString()به ترتیب به عنوان جایگزینهایی برایPyObject_GetAttr()وPyObject_GetAttrString()اضافه شدند. این توابع جدید اگر ویژگی درخواستشده روی شیء یافت نشود، استثنایAttributeErrorرا ایجاد نمیکنند. اگر نبود ویژگی نباید به عنوان شکست در نظر گرفته شود، این گونهها سادهتر و سریعتر هستند. (مشارکتشده توسط سرهی استورچاکا در gh-106521.)تابع
PyErr_FormatUnraisable()به عنوان توسعهای برایPyErr_WriteUnraisable()افزوده شد که امکان سفارشیسازی پیام هشدار را فراهم میکند. (مشارکتشده توسط Serhiy Storchaka در gh-108082.)توابع جدیدی افزوده شدند که بهجای borrowed reference، یک strong reference را برای محلیها، سراسریها و توکارهای فریم برمیگردانند، بهعنوان بخشی از PEP 667:
PyEval_GetFrameBuiltins()جایگزینPyEval_GetBuiltins()میشودPyEval_GetFrameGlobals()جایگزینPyEval_GetGlobals()میشودPyEval_GetFrameLocals()جایگزینPyEval_GetLocals()میشود
(مشارکتشده توسط Mark Shannon و Tian Gao در gh-74929.)
توابع
Py_GetConstant()وPy_GetConstantBorrowed()برای دریافت ارجاعهای قوی یا امانی به ثابتها اضافه شدند. برای مثال،Py_GetConstant(Py_CONSTANT_ZERO)یک ارجاع قوی به ثابت صفر برمیگرداند. (مشارکتشده توسط Victor Stinner در gh-115754.)تابع
PyImport_AddModuleRef()که بهجای ارجاع امانتی، یک ارجاع قوی برمیگرداند، بهعنوان جایگزینی برایPyImport_AddModule()افزوده شد. (مشارکتشده توسط ویکتور استینر در gh-105922.)افزودن تابع
Py_IsFinalizing()برای بررسی اینکه آیا مفسر اصلی پایتون در حال خاموش شدن است یا خیر. (مشارکتشده توسط Victor Stinner در gh-108014.)تابع
PyList_GetItemRef()که ارجاع قوی را بهجای ارجاع امانتی برمیگرداند، بهعنوان جایگزینی برایPyList_GetItem()افزوده شد. (مشارکت Sam Gross در gh-114329.)توابع
PyList_Extend()وPyList_Clear()افزوده شدند که مشابه متدهایlist.extend()وlist.clear()پایتون هستند. (مشارکتشده توسط Victor Stinner در gh-111138.)تابع
PyLong_AsInt()اضافه شد. این تابع مشابهPyLong_AsLong()رفتار میکند، اما نتیجه را بهجای یک long از C، در یک int از C ذخیره میکند. (مشارکتشده توسط Victor Stinner در gh-108014.)توابع
PyLong_AsNativeBytes()،PyLong_FromNativeBytes()وPyLong_FromUnsignedNativeBytes()برای سادهسازی تبدیل بین نوعهای عدد صحیح بومی و اشیاءintپایتون اضافه شدند. (مشارکتشده توسط Steve Dower در gh-111140.)افزودن تابع
PyModule_Add()که مشابهPyModule_AddObjectRef()وPyModule_AddObject()است، اما همیشه ارجاع به مقدار را میدزدد. (مشارکتشده توسط Serhiy Storchaka در gh-86493.)تابع
PyObject_GenericHash()افزوده شد که تابع هش پیشفرض یک شیء پایتون را پیادهسازی میکند. (مشارکتشده توسط Serhiy Storchaka در gh-113024.)افزودن تابع
Py_HashPointer()برای هش کردن یک اشارهگر خام. (مشارکتشده توسط Victor Stinner در gh-111545.)توابع
PyObject_VisitManagedDict()وPyObject_ClearManagedDict()افزوده شدند که باید توسط توابع پیمایش و پاکسازی نوعی که از پرچمPy_TPFLAGS_MANAGED_DICTاستفاده میکند فراخوانی شوند. برای استفاده از این توابع در پایتون 3.11 و 3.12 میتوان از pythoncapi-compat project بهره برد. (مشارکتشده توسط Victor Stinner در gh-107073.)توابع
PyRefTracer_SetTracer()وPyRefTracer_GetTracer()اضافه شدند که امکان پیگیری ایجاد و نابودی شیء را به همان شیوهای که ماژولtracemallocانجام میدهد، فراهم میکنند. (مشارکت پابلو گالیندو در gh-93502.)تابع
PySys_AuditTuple()بهعنوان جایگزینی برایPySys_Audit()افزوده شد که آرگومانهای رویداد را بهصورت یک شیءtupleپایتون میگیرد. (مشارکتشده توسط Victor Stinner در gh-85283.)تابع
PyThreadState_GetUnchecked()بهعنوان جایگزینی برایPyThreadState_Get()اضافه شد که در صورتNULLبودن، فرایند را با یک خطای مهلک از کار نمیاندازد. فراخواننده مسئول بررسیNULLبودن نتیجه است. (مشارکتشده توسط ویکتور استینر در gh-108867.)تابع
PyType_GetFullyQualifiedName()برای بهدستآوردن نام کامل نوع اضافه شد. اگرtype.__module__یک رشته باشد و برابر هیچیک از'builtins'یا'__main__'نباشد، نام ماژول به ابتدای آن افزوده میشود. (مشارکتشده توسط Victor Stinner در gh-111696.)تابع
PyType_GetModuleName()برای دریافت نام ماژول نوع اضافه شد. این کار معادل دریافت ویژگیtype.__module__است. (مشارکت اریک اسنو و ویکتور استینر در gh-111696.)توابع
PyUnicode_EqualToUTF8AndSize()وPyUnicode_EqualToUTF8()برای مقایسهی یک شیء یونیکد با یک رشتهی کدگذاریشده به UTF-8 از نوع const char* و1اگر برابر باشند یا0در غیر این صورت اضافه شدند. این توابع استثنا ایجاد نمیکنند. (مشارکتشده توسط Serhiy Storchaka در gh-110289.)تابع
PyWeakref_GetRef()بهعنوان جایگزینی برایPyWeakref_GetObject()افزوده شد که اگر مورد ارجاع دیگر زنده نباشد،NULLو در غیر این صورت یک ارجاع قوی برمیگرداند. (مشارکتشده توسط Victor Stinner در gh-105927.)افزودن نسخههای اصلاحشدهی توابعی که خطاها را بیسروصدا نادیده میگیرند:
PyObject_HasAttrWithError()جایگزینPyObject_HasAttr()میشود.PyObject_HasAttrStringWithError()جایگزینPyObject_HasAttrString()میشود.PyMapping_HasKeyWithError()جایگزینPyMapping_HasKey()میشود.PyMapping_HasKeyStringWithError()جایگزینPyMapping_HasKeyString()میشود.
توابع جدید در صورت خطا
-1و مقدار استاندارد1برای درست و0برای نادرست را برمیگردانند.(مشارکت Serhiy Storchaka در gh-108511.)
APIهای C تغییریافته¶
پارامتر keywords در
PyArg_ParseTupleAndKeywords()وPyArg_VaParseTupleAndKeywords()اکنون در C از نوع char *const* و در C++ از نوع const char *const* است، بهجای char**. در C++، این امر باعث میشود این توابع با آرگومانهایی از نوع const char *const*، const char** یا char *const* بدون تبدیل نوع صریح سازگار باشند. در C، این توابع فقط از آرگومانهایی از نوع char *const* پشتیبانی میکنند. این را میتوان با ماکرویPY_CXX_CONSTبازتعریف کرد. (مشارکت Serhiy Storchaka در gh-65210.)PyArg_ParseTupleAndKeywords()اکنون از نامهای غیر اسکی برای پارامترهای کلیدواژهای پشتیبانی میکند. (مشارکتشده توسط Serhiy Storchaka در gh-110815.)تابع
PyCode_GetFirstFree()اکنون API ناپایدار است و اکنونPyUnstable_Code_GetFirstFree()نامیده میشود. (مشارکتشده توسط Bogdan Romanyuk در gh-115781.)توابع
PyDict_GetItem()،PyDict_GetItemString()،PyMapping_HasKey()،PyMapping_HasKeyString()،PyObject_HasAttr()،PyObject_HasAttrString()وPySys_GetObject()، که هر یک تمام خطاهای رخداده هنگام فراخوانیاش را پاک میکند، اکنون این خطاها را با استفاده ازsys.unraisablehook()گزارش میکنند. مطابق توصیههای مستندات، میتوانید آنها را با توابع دیگری جایگزین کنید. (با مشارکت Serhiy Storchaka در gh-106672.)افزودن پشتیبانی از قالبهای
%T،%#T،%Nو%#NبهPyUnicode_FromFormat():%T: به دست آوردن نام کامل نوع یک شیء%#T: مانند بالا، اما از دو نقطه بهعنوان جداکننده استفاده میشود%N: به دست آوردن نام کامل یک نوع%#N: مانند بالا، اما از دونقطه بهعنوان جداکننده استفاده میشود
برای اطلاعات بیشتر به PEP 737 مراجعه کنید. (مشارکتشده توسط Victor Stinner در gh-111696.)
دیگر لازم نیست هنگام استفاده از قالبهای
#در کدهای قالب، پیش از گنجاندنPython.hماکرویPY_SSIZE_T_CLEANرا تعریف کنید. APIهایی که کدهای قالب را میپذیرند، همیشه برای قالبهای#ازPy_ssize_tاستفاده میکنند. (با مشارکت Inada Naoki در gh-104922.)اگر پایتون در حالت اشکالزدایی یا
با ادعاهاساخته شده باشد،PyTuple_SET_ITEM()وPyList_SET_ITEM()اکنون آرگومان اندیس را با یک ادعا بررسی میکنند. (مشارکتشده توسط Victor Stinner در gh-106168.)
تغییرات C API محدود¶
توابع زیر اکنون در API محدود C گنجانده شدهاند:
پایتونی که با
--with-trace-refs(ردگیری ارجاعها) ساختهشده است، اکنون از API محدود پشتیبانی میکند. (مشارکتشده توسط Victor Stinner در gh-108634.)
APIهای C حذفشده¶
چندین تابع، ماکرو، متغیر و غیره با نامهایی که پیشوند
_Pyیا_PYدارند (که خصوصی محسوب میشوند) حذف شدند. اگر پروژهی شما تحت تأثیر یکی از این حذفها قرار میگیرد و معتقدید که API حذفشده باید در دسترس باقی بماند، لطفاً برای درخواست یک C API عمومی، یک مسئله جدید باز کنید وcc: @vstinnerرا به مسئله اضافه کنید تا Victor Stinner مطلع شود. (مشارکتشده توسط Victor Stinner در gh-106320.)پروتکلهای بافر قدیمی که در پایتون 3.0 منسوخ شده بودند، حذف شدند. به جای آنها از پروتکل بافر استفاده کنید.
PyObject_CheckReadBuffer(): برای بررسی اینکه آیا شیء از پروتکل بافر پشتیبانی میکند، ازPyObject_CheckBuffer()استفاده کنید. توجه داشته باشید کهPyObject_CheckBuffer()تضمین نمیکند کهPyObject_GetBuffer()با موفقیت انجام شود. برای بررسی اینکه آیا شیء واقعاً قابل خواندن است، به مثال بعدی ازPyObject_GetBuffer()مراجعه کنید.PyObject_AsCharBuffer()،PyObject_AsReadBuffer(): بهجای آنها ازPyObject_GetBuffer()وPyBuffer_Release()استفاده کنید:Py_buffer view; if (PyObject_GetBuffer(obj, &view, PyBUF_SIMPLE) < 0) { return NULL; } // برای خواندن از بافر، از `view.buf` و `view.len` استفاده کنید. // ممکن است لازم باشد buf را بهصورت `(const char*)view.buf` قالبریزی کنید. PyBuffer_Release(&view);
PyObject_AsWriteBuffer(): بهجای آن ازPyObject_GetBuffer()وPyBuffer_Release()استفاده کنید:Py_buffer view; if (PyObject_GetBuffer(obj, &view, PyBUF_WRITABLE) < 0) { return NULL; } // برای نوشتن در بافر، از `view.buf` و `view.len` استفاده کنید. PyBuffer_Release(&view);
(مشارکتشده توسط Inada Naoki در gh-85275.)
حذف توابع مختلفی که در پایتون 3.9 منسوخ شدهاند:
PyEval_CallObject()،PyEval_CallObjectWithKeywords(): به جای آنها ازPyObject_CallNoArgs()یاPyObject_Call()استفاده کنید.هشدار
در
PyObject_Call()، آرگومانهای جایگاهی باید یکtupleباشند و نبایدNULLباشند، و آرگومانهای کلیدواژهای باید یکdictیاNULLباشند؛ در حالی که توابع حذفشده نوع آرگومانها را بررسی میکردند و آرگومانهای جایگاهی و کلیدواژهایNULLرا میپذیرفتند. برای جایگزینیPyEval_CallObjectWithKeywords(func, NULL, kwargs)باPyObject_Call()، یک تاپل خالی را بهعنوان آرگومانهای جایگاهی با استفاده ازPyTuple_New(0)ارسال کنید.PyEval_CallFunction(): بهجای آن ازPyObject_CallFunction()استفاده کنید.PyEval_CallMethod(): به جای آن ازPyObject_CallMethod()استفاده کنید.PyCFunction_Call(): به جای آن ازPyObject_Call()استفاده کنید.
(مشارکتشده توسط Victor Stinner در gh-105107.)
توابع قدیمی زیر برای پیکربندی مقداردهی اولیه پایتون، که در پایتون 3.11 منسوخ شده بودند، حذف شدند:
PySys_AddWarnOptionUnicode(): بهجای آن ازPyConfig.warnoptionsاستفاده کنید.PySys_AddWarnOption(): به جای آن ازPyConfig.warnoptionsاستفاده کنید.PySys_AddXOption(): بهجای آن ازPyConfig.xoptionsاستفاده کنید.PySys_HasWarnOptions(): بهجای آن ازPyConfig.xoptionsاستفاده کنید.PySys_SetPath(): در عوض،PyConfig.module_search_pathsرا تنظیم کنید.Py_SetPath(): در عوض،PyConfig.module_search_pathsرا تنظیم کنید.Py_SetStandardStreamEncoding(): بهجای آن،PyConfig.stdio_encodingرا تنظیم کنید و احتمالاًPyConfig.legacy_windows_stdioرا نیز تنظیم کنید (در ویندوز)._Py_SetProgramFullPath(): به جای آن،PyConfig.executableرا تنظیم کنید.
بهجای آن از API جدید
PyConfigدر پیکربندی مقداردهی اولیه پایتون استفاده کنید (PEP 587)، که در پایتون 3.8 اضافه شد. (مشارکت Victor Stinner در gh-105145.)توابع
PyEval_AcquireLock()وPyEval_ReleaseLock()که در پایتون 3.2 منسوخ شده بودند، حذف شدند. این توابع وضعیت نخ جاری را بهروزرسانی نمیکردند. میتوان آنها را با موارد زیر جایگزین کرد:سطح پایین
PyEval_AcquireThread()وPyEval_RestoreThread()؛
(مشارکتشده توسط ویکتور استینر در gh-105182.)
تابع
PyEval_ThreadsInitialized()که در پایتون 3.9 منسوخ شده بود، حذف شد. از پایتون 3.7 به بعد،Py_Initialize()همیشه قفل مفسر سراسری را ایجاد میکند: فراخوانیPyEval_InitThreads()هیچ کاری انجام نمیدهد وPyEval_ThreadsInitialized()همیشه مقدار غیرصفر برمیگرداند. (با مشارکت Victor Stinner در gh-105182.)نام مستعار
_PyInterpreterState_Get()برایPyInterpreterState_Get()که برای حفظ سازگاری با نسخههای قبلی پایتون 3.8 نگه داشته شده بود، حذف شد. میتوان از pythoncapi-compat project برای دریافتPyInterpreterState_Get()در پایتون 3.8 و نسخههای قدیمیتر استفاده کرد. (مشارکتشده توسط Victor Stinner در gh-106320.)تابع خصوصی
_PyObject_FastCall()حذف شد: ازPyObject_Vectorcall()استفاده کنید که از پایتون 3.8 به بعد در دسترس است (PEP 590). (مشارکتشده توسط Victor Stinner در gh-106023.)پروندهی سرآیند
cpython/pytime.hکه تنها شامل توابع خصوصی بود، حذف شد. (مشارکتشده توسط Victor Stinner در gh-106316.)ثابت مستندنشدهی
PY_TIMEOUT_MAXاز C API محدود حذف شد. (با مشارکت Victor Stinner در gh-110014.)ماکروهای قدیمی سطل زباله (trashcan)
Py_TRASHCAN_SAFE_BEGINوPy_TRASHCAN_SAFE_ENDحذف شدند. هر دو با ماکروهای جدیدPy_TRASHCAN_BEGINوPy_TRASHCAN_ENDجایگزین شدند. (با مشارکت ایریت کاتریل در gh-105111.)
APIهای منسوخ C¶
منسوخ کردن توابع قدیمی مقداردهی اولیه پایتون:
PySys_ResetWarnOptions(): در عوض،sys.warnoptionsوwarnings.filtersرا پاک کنید.Py_GetExecPrefix(): بهجای آنsys.exec_prefixرا دریافت کنید.Py_GetPath(): بهجای آنsys.pathرا دریافت کنید.Py_GetPrefix(): به جای آن،sys.prefixرا دریافت کنید.Py_GetProgramFullPath(): به جای آنsys.executableرا دریافت کنید.Py_GetProgramName(): بهجای آنsys.executableرا دریافت کنید.Py_GetPythonHome(): به جای آن،PyConfig.homeیا متغیر محیطیPYTHONHOMEرا دریافت کنید.
(مشارکتشده توسط ویکتور استینر در gh-105145.)
منسوخسازی نرم (soft deprecation) توابع
PyEval_GetBuiltins()،PyEval_GetGlobals()وPyEval_GetLocals()که یک ارجاع امانتی برمیگردانند. (منسوخسازی نرم بهعنوان بخشی از PEP 667.)منسوخ شدن تابع
PyImport_ImportModuleNoBlock()که از پایتون 3.3 صرفاً یک نام مستعار برایPyImport_ImportModule()است. (نوشتهی Victor Stinner در gh-105396.)منسوخسازی نرم تابع
PyModule_AddObject()انجام شد. این تابع باید باPyModule_Add()یاPyModule_AddObjectRef()جایگزین شود. (مشارکتشده توسط Serhiy Storchaka در gh-86493.)نوعهای قدیمی
Py_UNICODEوPY_UNICODE_TYPEو تعریفPy_UNICODE_WIDEمنسوخ شدند. بهجای آنها مستقیماً از نوعwchar_tاستفاده کنید. از پایتون 3.3 به بعد،Py_UNICODEوPY_UNICODE_TYPEفقط مستعاری برایwchar_tهستند. (مشارکتشده توسط Victor Stinner در gh-105156.)توابع
PyWeakref_GetObject()وPyWeakref_GET_OBJECT()که یک borrowed reference برمیگردانند، منسوخ شدند. بهجای آنها میتوان از تابع جدیدPyWeakref_GetRef()استفاده کرد که یک strong reference برمیگرداند. برای بهدستآوردنPyWeakref_GetRef()در پایتون 3.12 و نسخههای قدیمیتر میتوان از pythoncapi-compat project استفاده کرد. (مشارکتشده توسط Victor Stinner در gh-105927.)
در پایتون 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.
در انتظار حذف در پایتون 3.18¶
توابع خصوصی زیر منسوخ شدهاند و حذف آنها در Python 3.18 برنامهریزی شده است:
_PyBytes_Join(): ازPyBytes_Join()استفاده کنید._PyDict_GetItemStringWithError(): ازPyDict_GetItemStringRef()استفاده کنید._PyDict_Pop(): ازPyDict_Pop()استفاده کنید._PyLong_Sign(): ازPyLong_GetSign()استفاده کنید._PyLong_FromDigits()و_PyLong_New(): ازPyLongWriter_Create()استفاده کنید._PyThreadState_UncheckedGet(): ازPyThreadState_GetUnchecked()استفاده کنید._PyUnicode_AsString(): ازPyUnicode_AsUTF8()استفاده کنید._PyUnicodeWriter_Init():_PyUnicodeWriter_Init(&writer)را باwriter = PyUnicodeWriter_Create(0)جایگزین کنید._PyUnicodeWriter_Finish():_PyUnicodeWriter_Finish(&writer)را باPyUnicodeWriter_Finish(writer)جایگزین کنید._PyUnicodeWriter_Dealloc():_PyUnicodeWriter_Dealloc(&writer)را باPyUnicodeWriter_Discard(writer)جایگزین کنید._PyUnicodeWriter_WriteChar():_PyUnicodeWriter_WriteChar(&writer, ch)را باPyUnicodeWriter_WriteChar(writer, ch)جایگزین کنید._PyUnicodeWriter_WriteStr():_PyUnicodeWriter_WriteStr(&writer, str)را باPyUnicodeWriter_WriteStr(writer, str)جایگزین کنید._PyUnicodeWriter_WriteSubstring():_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)را باPyUnicodeWriter_WriteSubstring(writer, str, start, end)جایگزین کنید._PyUnicodeWriter_WriteASCIIString(): عبارت_PyUnicodeWriter_WriteASCIIString(&writer, str)را باPyUnicodeWriter_WriteASCII(writer, str)جایگزین کنید._PyUnicodeWriter_WriteLatin1String(): عبارت_PyUnicodeWriter_WriteLatin1String(&writer, str)را باPyUnicodeWriter_WriteUTF8(writer, str)جایگزین کنید._PyUnicodeWriter_Prepare(): (بدون جایگزین)._PyUnicodeWriter_PrepareKind(): (بدون جایگزین)._Py_HashPointer(): ازPy_HashPointer()استفاده کنید._Py_fopen_obj(): ازPy_fopen()استفاده کنید.
میتوان از پروژهی pythoncapi-compat برای دریافت این توابع عمومی جدید در پایتون 3.13 و نسخههای قدیمیتر استفاده کرد. (مشارکتشده توسط Victor Stinner در gh-128863.)
در انتظار حذف در نسخههای آینده¶
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 به بعد نیازی به آن نیست.
تغییرات ساخت¶
arm64-apple-iosوarm64-apple-ios-simulatorهر دو اکنون طبق PEP 11 پلتفرمهای رده ۳ هستند. (PEP 730 نوشته شد و پیادهسازی آن توسط Russell Keith-Magee در gh-114099 ارائه شد.)aarch64-linux-androidوx86_64-linux-androidهر دو اکنون پلتفرمهای رده ۳ بر اساس PEP 11 هستند. (PEP 738 نوشته شده و پیادهسازی آن توسط مالکوم اسمیت در gh-116622 ارائه شده است.)wasm32-wasiاکنون یک پلتفرم سطح ۲ مطابق PEP 11 است. (با مشارکت Brett Cannon در gh-115192.)wasm32-emscriptenدیگر یک پلتفرم پشتیبانیشدهی PEP 11 نیست. (مشارکتشده توسط Brett Cannon در gh-115192.)ساخت سیپایتون اکنون به کامپایلری نیاز دارد که از کتابخانه اتمی C11، توابع اتمی توکار GCC، یا توابع درونی interlocked در MSVC (interlocked intrinsics) پشتیبانی کند.
اکنون برای بازتولید اسکریپت
configureبه Autoconf 2.71 و aclocal 1.16.5 نیاز است. (مشارکتشده توسط Christian Heimes در gh-89886 و Victor Stinner در gh-112090.)برای ساخت ماژول توسعهای
sqlite3به SQLite 3.15.2 یا جدیدتر نیاز است. (مشارکت Erlend Aasland در gh-105875.)سیپایتون اکنون بهطور پیشفرض mimalloc library را به همراه دارد. این کتابخانه تحت مجوز MIT ارائه شده است؛ به مجوز mimalloc مراجعه کنید. نسخهی همراه mimalloc دارای تغییرات سفارشی است؛ برای جزئیات به gh-113141 مراجعه کنید. (مشارکتشده توسط Dino Viehland در gh-109914.)
گزینهی
--with-system-libmpdecدرconfigureاکنون بهطور پیشفرضyesاست. نسخهی همراهlibmpdecدر پایتون 3.16 حذف خواهد شد.پایتونی که با
configure--with-trace-refs(ردگیری ارجاعها) ساخته میشود، اکنون از نظر رابط دودویی برنامه (ABI) با ساخت انتشار پایتون و ساخت اشکالزدایی سازگار است. (مشارکتشده توسط Victor Stinner در gh-108634.)در سیستمهای POSIX، نام پروندههای pkg-config (
.pc) اکنون شامل پرچمهای ABI هستند. برای مثال، ساخت نخآزادpython-3.13t.pcرا تولید میکند و ساخت اشکالزداییpython-3.13d.pcرا تولید میکند.ماژولهای توسعه C یعنی
errno،fcntl،grp،md5،pwd،resource،termios،winsound،_ctypes_test،_multiprocessing.posixshmem،_scproxy،_stat،_statistics،_testconsole،_testimportmultipleو_uuidاکنون با C API محدود ساخته میشوند. (با مشارکت Victor Stinner در gh-85283.)
انتقال به پایتون 3.13¶
این بخش، تغییرات پیشتر شرح دادهشده و سایر رفع اشکالهایی را که ممکن است نیازمند تغییراتی در کد شما باشند، فهرست میکند.
تغییرات در API پایتون¶
PEP 667 چندین تغییر را در معناشناسی
locals()وf_localsمعرفی میکند:فراخوانی
locals()در یک محدوده بهینهشده اکنون در هر فراخوانی یک تصویر لحظهای مستقل تولید میکند و در نتیجه دیگر ارجاعهای پیشتر بازگرداندهشده را بهطور ضمنی بهروزرسانی نمیکند. بهدستآوردن رفتار قدیمی سیپایتون اکنون مستلزم این است که با فراخوانیهای صریح، دیکشنریای که در ابتدا بازگردانده شده است با نتایج فراخوانیهای بعدیlocals()بهروزرسانی شود. به توابع اجرای کد که بهطور ضمنیlocals()را هدف میگیرند (مانندexecوeval) باید یک فضای نام صریح پاس داده شود تا بتوان در یک محدوده بهینهشده به نتایج آنها دسترسی داشت. (این تغییر بهعنوان بخشی از PEP 667 انجام شده است.)فراخوانی
locals()از یک درک در محدوده ماژول یا کلاس (از جمله از طریقexecیاeval) دوباره طوری رفتار میکند که گویی درک بهصورت یک تابع تودرتوی مستقل در حال اجراست (یعنی متغیرهای محلی محدوده دربرگیرنده گنجانده نمیشوند). در پایتون 3.12، این رفتار هنگام پیادهسازی PEP 709 به گونهای تغییر کرده بود که متغیرهای محلی محدوده دربرگیرنده را در بر بگیرد. (بهعنوان بخشی از PEP 667 تغییر کرد.)دسترسی به
FrameType.f_localsدر یک محدوده بهینهشده اکنون یک پراکسی نوشتنهمزمان برمیگرداند، نه یک تصویر لحظهای که در زمانهای بهخوبی تعریفنشده بهروزرسانی میشود. در صورت نیاز به تصویر لحظهای، باید آن را بهطور صریح باdictیا متد.copy()پراکسی ایجاد کنید. (این تغییر بهعنوان بخشی از PEP 667 انجام شده است.)
functools.partialاکنون هنگامی که بهعنوان متد استفاده شود، یکFutureWarningمنتشر میکند. این رفتار در نسخههای آینده پایتون تغییر خواهد کرد. اگر میخواهید رفتار قدیمی را حفظ کنید، آن را درstaticmethod()بپیچید. (مشارکتشده توسط Serhiy Storchaka در gh-121027.)اکنون
OSErrorتوسطgetpass.getuser()در صورت هرگونه شکست در بازیابی نام کاربری ایجاد میشود، بهجایImportErrorدر پلتفرمهای غیر یونیکس یاKeyErrorدر پلتفرمهای یونیکس که پایگاه داده رمز عبور در آنها خالی است.مقدار ویژگی
modeازgzip.GzipFileاکنون یک رشته ('rb'یا'wb') است، بهجای یک عدد صحیح (1یا2). مقدار ویژگیmodeاز شیء شبهپروندهی خواندنی که توسطzipfile.ZipFile.open()بازگردانده میشود، اکنون'rb'است، بهجای'r'. (مشارکتشده توسط Serhiy Storchaka در gh-115961.)mailbox.Maildirاکنون پروندههایی را که با نقطه (.) آغاز میشوند نادیده میگیرد. (با مشارکت Zackery Spytz در gh-65559.)pathlib.Path.glob()وrglob()اکنون اگر الگویی که به «**» ختم میشود داده شود، هم پروندهها و هم پوشهها را برمیگردانند، نه فقط پوشهها. برای حفظ رفتار قبلی و تطبیق فقط با پوشهها، یک اسلش انتهایی اضافه کنید.ماژول
threadingاکنون انتظار دارد که ماژول_threadتابع_is_main_interpreter()را داشته باشد. این تابع هیچ آرگومانی نمیگیرد و اگر مفسر فعلی، مفسر اصلی باشد،Trueبرمیگرداند.هر کتابخانه یا برنامهای که یک ماژول
_threadسفارشی ارائه میدهد، باید_is_main_interpreter()را نیز فراهم کند، درست مانند سایر ویژگیهای «خصوصی» ماژول. (gh-112826.)
تغییرات در API زبان C¶
Python.hدیگر سرآیند استاندارد<ieeefp.h>را شامل نمیشود. این سرآیند برای تابعfinite()گنجانده شده بود که اکنون توسط سرآیند<math.h>ارائه میشود. اکنون در صورت نیاز باید بهطور صریح گنجانده شود. ماکروHAVE_IEEEFP_Hرا نیز حذف کنید. (مشارکت Victor Stinner در gh-108765.)Python.hدیگر این پروندههای سرآیند استاندارد را شامل نمیشود:<time.h>،<sys/select.h>و<sys/time.h>. در صورت نیاز، اکنون باید بهطور صریح گنجانده شوند. برای مثال،<time.h>توابعclock()وgmtime()را فراهم میکند،<sys/select.h>تابعselect()را فراهم میکند و<sys/time.h>توابعfutimes()،gettimeofday()وsetitimer()را فراهم میکند. (مشارکتشده توسط Victor Stinner در gh-108765.)در ویندوز،
Python.hدیگر شامل پروندهی سرآیند استاندارد<stddef.h>نیست. در صورت نیاز، اکنون باید بهصورت صریح گنجانده شود. برای مثال، این سرآیند تابعoffsetof()و نوعهایsize_tوptrdiff_tرا فراهم میکند. گنجاندن<stddef.h>بهصورت صریح از قبل برای همهی پلتفرمهای دیگر لازم بود؛ ماکرویHAVE_STDDEF_Hفقط در ویندوز تعریف میشود. (مشارکتشده توسط Victor Stinner در gh-108765.)اگر ماکروی
Py_LIMITED_APIتعریف شده باشد، ماکروهایPy_BUILD_CORE،Py_BUILD_CORE_BUILTINوPy_BUILD_CORE_MODULEاکنون توسط<Python.h>تعریف نمیشوند. (مشارکتشده توسط Victor Stinner در gh-85283.)ماکروهای قدیمی سطل زباله (trashcan)
Py_TRASHCAN_SAFE_BEGINوPy_TRASHCAN_SAFE_ENDحذف شدند. آنها باید با ماکروهای جدیدPy_TRASHCAN_BEGINوPy_TRASHCAN_ENDجایگزین شوند.یک تابع
tp_deallocکه ماکروهای قدیمی را دارد، مانند:static void mytype_dealloc(mytype *p) { PyObject_GC_UnTrack(p); Py_TRASHCAN_SAFE_BEGIN(p); ... Py_TRASHCAN_SAFE_END }
باید به ماکروهای جدید به شرح زیر مهاجرت کنند:
static void mytype_dealloc(mytype *p) { PyObject_GC_UnTrack(p); Py_TRASHCAN_BEGIN(p, mytype_dealloc) ... Py_TRASHCAN_END }
توجه داشته باشید که
Py_TRASHCAN_BEGINآرگومان دومی دارد که باید همان تابع آزادسازی باشد که این ماکرو در آن قرار دارد. ماکروهای جدید در پایتون 3.8 اضافه شدند و ماکروهای قدیمی در پایتون 3.11 منسوخ شدند. (مشارکتشده توسط ایریت کاتریل در gh-105111.)
PEP 667 چندین تغییر در توابع مرتبط با فریم معرفی میکند:
اثرات تغییر دادن دیکشنری بازگرداندهشده از
PyEval_GetLocals()در یک محدوده بهینهشده تغییر کردهاند. مدخلهای جدید دیکشنری که به این روش اضافه میشوند، اکنون تنها برای فراخوانیهای بعدیPyEval_GetLocals()در آن فریم قابل مشاهده خواهند بود، زیراPyFrame_GetLocals()،locals()وFrameType.f_localsدیگر به همان دیکشنری نهانگاهشدهی زیرین دسترسی ندارند. تغییراتی که در مدخلهای مربوط به نامهای متغیرهای واقعی و نامهای افزودهشده از طریق رابطهای پراکسی نوشتنهمزمان اعمال میشوند، در فراخوانیهای بعدیPyEval_GetLocals()در آن فریم بازنویسی خواهند شد. بهروزرسانی توصیهشدهی کد به نحوهی استفاده از تابع بستگی دارد، بنابراین برای جزئیات به اطلاعیهی منسوخشدن تابع مراجعه کنید.فراخوانی
PyFrame_GetLocals()در محدوده بهینهشده اکنون بهجای یک تصویر لحظهای که در زمانهای نامشخص بهروزرسانی میشود، یک پراکسی نوشتنهمزمان برمیگرداند. اگر تصویر لحظهای مورد نیاز است، باید بهطور صریح ایجاد شود (مثلاً باPyDict_Copy())، یا با فراخوانی API جدیدPyEval_GetFrameLocals().PyFrame_FastToLocals()وPyFrame_FastToLocalsWithError()دیگر هیچ اثری ندارند. فراخوانی این توابع از زمان پایتون 3.11، زمانی کهPyFrame_GetLocals()برای نخستین بار معرفی شد، زائد بوده است.PyFrame_LocalsToFast()دیگر هیچ اثری ندارد. اکنون کهPyFrame_GetLocals()برای محدودههای بهینهشده یک پراکسی نوشتنهمزمان برمیگرداند، فراخوانی این تابع زائد است.
پایتون 3.13 بسیاری از توابع خصوصی را حذف کرد. برخی از آنها را میتوان با استفاده از این جایگزینها جایگزین کرد:
_PyDict_Pop():PyDict_Pop()یاPyDict_PopString()؛_PyDict_GetItemWithError():PyDict_GetItemRef();_PyErr_WriteUnraisableMsg():PyErr_FormatUnraisable();_PyEval_SetTrace():PyEval_SetTrace()یاPyEval_SetTraceAllThreads();_PyList_Extend():PyList_Extend();_PyLong_AsInt():PyLong_AsInt();_PyMem_RawStrdup():strdup();_PyMem_Strdup():strdup();_PyObject_ClearManagedDict():PyObject_ClearManagedDict();_PyObject_VisitManagedDict():PyObject_VisitManagedDict();_PyThreadState_UncheckedGet():PyThreadState_GetUnchecked();_PyTime_AsSecondsDouble():PyTime_AsSecondsDouble();_PyTime_GetMonotonicClock():PyTime_Monotonic()یاPyTime_MonotonicRaw()؛_PyTime_GetPerfCounter():PyTime_PerfCounter()یاPyTime_PerfCounterRaw()؛_PyTime_GetSystemClock():PyTime_Time()یاPyTime_TimeRaw()؛_PyTime_MAX:PyTime_MAX;_PyTime_MIN:PyTime_MIN;_PyTime_t:PyTime_t;_Py_HashPointer():Py_HashPointer();_Py_IsFinalizing():Py_IsFinalizing().
میتوان از pythoncapi-compat project برای به دست آوردن بیشتر این توابع جدید در پایتون 3.12 و نسخههای قدیمیتر استفاده کرد.
تغییرات آزمونهای رگرسیون¶
پایتونی که با
configure--with-pydebugساخته شده است، اکنون از گزینهی خط فرمان-X presite=package.moduleپشتیبانی میکند. در صورت استفاده، این گزینه ماژولی را مشخص میکند که باید در اوایل چرخهی حیات مفسر، پیش از اجرایsite.pyایمپورت شود. (مشارکتشده توسط Łukasz Langa در gh-110769.)