Faragiri
فارسی

همهٔ زبان‌ها

آموزش کتابخانه استاندارد پایتون پایتون

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

۴بخش
۳دقیقه خواندن
۴عمق

شش ایمپورت، صفر وابستگی

هر ماژول برای چه کاری است، دسته‌بندی‌شده بر اساس کاری که داشتید

هر شاخه اینجا چیزی است که آدم‌ها برایش بسته نصب می‌کنند، و هر برگ رویش همین حالا روی ماشین است.

  • گرفتن آرگوماناسکریپتی که کس دیگری اجرا می‌کند
    • argparse: پرچم، نوع، و سطر راهنمای رایگان
  • حلقه‌هایی که می‌خواستید بنویسیدگروه‌بندی، جفت کردن، تکه کردن
    • itertools.groupby: اول مرتب کنید وگرنه دو بار گروه می‌کند
    • itertools.pairwise: جفت‌های پشت سر هم، از پایتون 3.10
    • itertools.batched: تکه‌ها، و تکه آخر کوتاه هم درست
  • رساندنش روی صفحهعرض‌ها، و فضای دیسک
    • textwrap: روی مرز کلمه می‌شکند
    • shutil: بایت خالی، پیش از نوشتن به‌جای بعد از شکست
از قبل نصب است
  • زمانی که حساب ساده نیستاختلاف‌ها، و اختلاف نیم‌ساعتی
    • zoneinfo: تهران، و نه یک عدد ساعت
  • هر چیزی که غریبه می‌بیندتوکن، لینک، نشانی بازیابی
    • secrets: و نه random، که از خروجی‌اش قابل پیش‌بینی است

شاخه‌ها کارها هستند و نه دسته‌ها، چون فهرست رسمی ماژول‌ها به شکل دیگری مرتب شده و دقیقا به همین دلیل کسی این‌ها را پیدا نمی‌کند.

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

argparse برای اسکریپتی که کس دیگری اجرا می‌کند. سه سطر تعریف، و سطر راهنما و بررسی نوع رایگان می‌آید:

  • ap.add_argument("--saghf", type=int, default=50)
  • با ورودی درست: Namespace(pooshe='aksha', faghat_neshan=True, saghf=50)
  • با ورودی غلط: morattab: error: argument --saghf: invalid int value: 'ziad'

یک قاعده که وقت می‌گیرد تا کشف شود: خط تیره در نام پرچم روی صفت خروجی به زیرخط تبدیل می‌شود، پس --faghat-neshan می‌شود faghat_neshan.

پنج ماژول دیگر، و کاری که هرکدام حذف می‌کنند

zoneinfo منطقه زمانی واقعی می‌دهد و نه یک عدد ساعت. برای ایران این تفاوت جدی است، چون اختلاف نیم‌ساعتی است و هر کدی که ساعت را با جمع و تفریق عدد صحیح حساب کند دیر یا زود نیم ساعت اشتباه می‌شود. itertools حلقه‌هایی را که می‌خواستید بنویسید حاضر دارد: groupby برای گروه‌بندی که پیش از آن باید مرتب کنید وگرنه یک گروه را دو بار می‌سازد، pairwise برای جفت‌های پشت سر هم از پایتون 3.10، و batched برای تکه کردن که تکه آخر کوتاه را هم درست جواب می‌دهد.

secrets برای هر چیزی که یک غریبه می‌بیند، مثل توکن و لینک بازیابی رمز. ماژول random برای این کار غلط است چون خروجی‌اش از روی خروجی‌های قبلی قابل پیش‌بینی است، و این یک نکته سبکی نیست. textwrap متن را روی مرز کلمه می‌شکند و نه وسط کلمه، و shutil فضای خالی دیسک را پیش از نوشتن می‌گوید به‌جای اینکه بعد از شکست بفهمید.

چرا این فهرست در ایران وزن دیگری دارد

هر بسته‌ای که نصب نمی‌کنید یک وابستگی به مخزن بیرونی کمتر است. برای تیمی که pip install کردنش همیشه از اولین بار جواب نمی‌دهد، کدی که فقط با کتابخانه استاندارد کار می‌کند روی هر ماشینی و در هر شرایطی بالا می‌آید. این نه یک اصل مهندسی جهانی است و نه سخت‌گیری بی‌دلیل؛ یک واقعیت محلی است که انتخاب فنی را عوض می‌کند. پیش از افزودن هر وابستگی، یک بار در همین کتابخانه بگردید.

جایی که کار گیر می‌کند، جست‌وجو به‌جای فهرست است

مستندات رسمی بر اساس دسته‌بندی موضوعی مرتب شده و نه بر اساس کاری که شما داشتید، و دقیقا به همین دلیل این ماژول‌ها پیدا نمی‌شوند: کسی که دنبال «گروه‌بندی سطرها» است هرگز به فصل «توابع ایجاد کننده تکرارشونده» نمی‌رسد. کاری که واقعا جواب می‌دهد این است که یک بار فهرست ماژول‌ها را از بالا تا پایین بخوانید و فقط نام‌ها را نگاه کنید، بدون خواندن هیچ توضیحی. نیم ساعت طول می‌کشد و از آن به بعد می‌دانید که چیزی برای این کار وجود دارد، که تنها چیزی است که لازم است بدانید.

ابزار، و سالی که این حرف درست است

در سال ۲۰۲۶ هر شش ماژول بالا در پایتون 3.14 هستند و رایگان، و هیچ‌کدام به شبکه نیازی ندارند. zoneinfo از پایتون 3.9 اضافه شد و جای بسته pytz را گرفت، که تا پیش از آن تنها راه بود و رابطش هم دام‌های خودش را داشت؛ روی ویندوز داده منطقه زمانی جدا نصب می‌شود و روی سیستم‌های شبه‌یونیکس از خود سیستم‌عامل می‌آید. itertools.batched تازه‌تر از بقیه است و از پایتون 3.12 در دسترس است.

پرسش بعدی این است که وقتی چیزی لازم شد که در این فهرست نیست، چطور نصب شود بی‌آنکه پروژه‌های دیگر را خراب کند، که نصب کتابخانه، و جدا نگه داشتن پروژه‌ها از هم است. و اولین جایی که این ماژول‌ها به کار می‌آیند معمولا یک اسکریپت کوچک است: فایل‌ها، صفحه‌گسترده‌ها و کارهای تکراری.

کنار این

بالای این