تقنية

compileall في بايثون: هل True تشمل المجلدات المستبعدة؟

العمق صفر يعطي True والعمق واحد False
الشجرة نفسها، نطاقان. [1] [2]

نجاح الملفات المختارة لا يشمل مجلدًا لم ندخله. [1] [2]

الخلاصة السريعة

عند maxlevels=0 لا تدخل compile_dir المجلدات الفرعية؛ قد تعيد True مع خطأ فيها. [1] [2]

  • ننشئ ملفًا صالحًا في الجذر. [1] [2]
  • نضع raise ( غير المكتملة داخل sub. [1] [2]
  • العمق صفر يعيد True. [1] [2]
  • العمق واحد يعيد False. [1] [2]
  • quiet=2 يخفي الرسائل، ولا يحوّل الفشل إلى نجاح. [1] [2]

المثال

import compileall as c
import tempfile as t
from pathlib import Path
run=c.compile_dir
with t.TemporaryDirectory() as d:
 r=Path(d)
 s=r/'sub';s.mkdir()
 (r/'a.py').write_text('x=7')
 (s/'b.py').write_text('raise (')
 print(run(d,maxlevels=0,quiet=2))
 print(run(d,maxlevels=1,quiet=2))

[1] [2]

المخرجان True ثم False في 3.12.14. [1] [2]

لماذا تغيرت النتيجة؟

عند العمق صفر تُختار ملفات الجذر؛ الزيادة تسمح بدخول sub وكشف خطأ الصياغة. [1] [2]

a.py صالح وsub/b.py فيه قوس غير مكتمل
ملفان أنشأناهما للتجربة. [1] [2]

ينقص التنفيذ العمق عند كل دخول، ويجمع نتائج الملفات المختارة. [1] [2]

حد الحكم

تجربتنا لمجلدات عادية مؤقتة؛ ليست فحصًا شاملًا لتشغيل المشروع. [1] [2]

المراجع

  1. Python: compileall
  2. CPython 3.12.14: compileall.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.