أغلب التبعيات الصغيرة في مشروع بايثون تستبدل شيئا مثبتا أصلا. ستة وحدات تغطي الأغلب، وكل واحدة استيراد واحد بلا نسخة يجب تثبيتها ولا شيء ينكسر يوم يتوقف صيانته.
argparse يحوّل سكريبتا إلى أمر. ap.add_argument("--limit", type=int, default=30) وقيمة خاطئة تخرج برسالة invalid int value: 'كثير' بعد طباعة سطر الاستخدام، قبل أن يعمل الكود على الإطلاق. action="store_true" يعطي خيار --dry-run، وتحليل ["سموحة", "--dry-run"] يجيب Namespace(branch='سموحة', dry_run=True, limit=30). لاحظي الشرطة السفلية: شرطة في اسم الخيار تتحول إلى شرطة سفلية في الاسم.
zoneinfo يتولى الجزء من الوقت الذي ليس حسابا. ZoneInfo("Africa/Casablanca") يعرف أن المغرب يعيد الساعة إلى التوقيت العادي في رمضان ثم يعيدها بعده، وهذا تحول حقيقي لا يمثله رقم ثابت من الساعات أبدا. هذا هو السبب في استخدام قاعدة بيانات مناطق زمنية حقيقية لا عدد صحيح من الساعات، وهو في المكتبة القياسية منذ بايثون 3.9.
ثلاثة تحل محل حلقة كنتِ على وشك كتابتها
itertools.groupby يطوي حلقة تجميع، بشرط واحد يوقع فيه الجميع: يجمع فقط التشغيلات المتجاورة فعلا، فيجب أن تكون الصفوف مرتبة على المفتاح نفسه أولا. على صفوف استلام مرتبة يعطي 'سموحة' مع ['فستان', 'قميص'] ثم 'جليم'. مدخل غير مرتب ينتج المفتاح نفسه مرتين بصمت.
itertools.pairwise يعطي أزواجا متتالية: [(22, 24), (24, 27)] من ثلاث قراءات حرارة، وهي كل حلقة فرق بين قيمتين متتاليتين كُتبت يوما، في نداء واحد، منذ بايثون 3.10. itertools.batched يقسّم متتالية إلى دفعات: [('A', 'B', 'C'), ('D', 'E', 'F'), ('G',)]، والدفعة الأخيرة القصيرة هي الحالة التي يخطئها المقسّم المكتوب يدويا.
واحدة قرار أمان لا راحة
secrets هي التي يجب معرفتها بالاسم. secrets.token_urlsafe(16) تعيد نصا من 22 محرفا آمنا لوضعه في رابط، مسحوبا من مصدر تشفيري في نظام التشغيل. وحدة random ليست كذلك: سريعة، قابلة لإعادة الإنتاج، وقابلة للتنبؤ من مخرجه، وهذا صحيح تماما لخلط ورق اللعب وخاطئ تماما لرابط إعادة تعيين كلمة مرور. استخدام random حيث ينتمي secrets ثغرة حقيقية لا يفشل أي اختبار فيها، وهذا سبب وجود الوحدتين منفصلتين.
textwrap وshutil يسدّان الفجوات حول ما سبق. textwrap.shorten يعطي رف طويل جدا ...، مقتطعا عند حد كلمة لا في منتصفها، وshutil.disk_usage("/").free يجيب بالبايت، وهو الفحص الذي ينبغي لسكريبت يكتب ملفات أن يجريه قبل أن يبدأ لا بعد أن يفشل.
الفهرس الذي تفتحينه في 2026
فهرس وحدات المكتبة القياسية هو الأداة، مجاني، والعادة التي تستحق البناء هي فتحه قبل إضافة تبعية لا بعدها. حلّ محل البحث عن حزمة أولا، وهو بحث يجد واحدة عادة لأن أحدا نشر حزمة لكل شيء في هذه القائمة.
بايثون 3.14 هو ما تفترضه هذه الإصدارات، مجاني ومفتوح المصدر. ثلاث من الوحدات الست أعلاه اكتسبت دالتها المذكورة هنا بعد 2020، فمشروع مثبت على مفسر قديم يملك أقل مما تقترحه هذه الصفحة، وتفقّد ملاحظة الإصدار في التوثيق عادة عشر ثوان تمنع خطأ استيراد محيرا.
لماذا لا يبحث أحد عن الاسم الصحيح
العطل ألا تعرفي ما تبحثين عنه، ولا كمية قراءة تصلح هذا مباشرة. لا أحد يبحث عن pairwise وهو لا يعرف الكلمة، والحلقة التي تحسب الفروق بين قراءات متتالية تُكتب يدويا مئة مرة لأنها سهلة بما يكفي لتُكتب.
ما ينجح فعلا هو قراءة فهرس وحدة واحدة كلما كتبتِ حلقة تشعرين أنها عامة. حلقة تجمّع أو تقسّم أو تزاوج أو تعد أو تسطّح هي واحدة من ثماني دوال في itertools وcollections، وربع ساعة مع هذين الفهرسين أعلى قراءة عائدا في هذه اللغة. الأساليب التي تستبدلها هذه الدوال موضوعها أساسيات بايثون، وما تفعلينه حين يكون الجواب فعلا تبعية خارجية هو موضوع الحزم والبيئات.