تقنية

version في importlib.metadata: هل يثبت وجود وحدة للاستيراد؟

إصدار موجود ومواصفة وحدة غائبة
فحصان مختلفان. [1] [2] [3]

ننشئ بيانات إصدار دون وحدة. [1] [2] [3]

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

لا؛ إصدار التوزيعة لا يثبت استيراد وحدة. [1] [2] [3]

  • أسماء التوزيعات والاستيراد قد تختلف؛ اسمنا المؤلف غير موجود مسبقًا. [1] [2] [3]
  • نكتب METADATA مؤقتًا، دون ملف وحدة. [1] [2] [3]
  • يعيد version النص 9.0. [1] [2] [3]
  • يعيد find_spec هنا None. [1] [2] [3]
  • نزيل المسار في finally. [1] [2] [3]
  • اختبرنا 3.12.14؛ ليس تثبيتًا أو فحص حزمة حقيقية. [1] [2] [3]

المثال

import sys,tempfile
from pathlib import Path
from importlib.metadata import version
from importlib.util import find_spec
assert find_spec('ba_own_probe') is None
with tempfile.TemporaryDirectory() as d:
 p=Path(d)/'ba_own_probe-9.0.dist-info'
 p.mkdir()
 (p/'METADATA').write_text(
  'Name: ba_own_probe\nVersion: 9.0\n')
 sys.path.insert(0,d)
 try:
  print(version('ba_own_probe'))
  print(find_spec('ba_own_probe') is None)
 finally: sys.path.remove(d)

[1] [2] [3]

المخرجان 9.0 ثم True. [1] [2] [3]

البيانات والوحدة

البيانات قابلة للاكتشاف هنا؛ لا توجد وحدة باسمها. [1] [2] [3]

بيانات مؤلفة دون ملف وحدة
ملفاتنا المؤقتة. [1] [2] [3]

version يقرأ إصدار التوزيعة؛ أسماء التوزيعات والاستيراد ليست متطابقة بالضرورة. [1] [2] [3]

حدود التجربة

المسار مؤقت ويحذف؛ ليست حزمة مثبتة. الاسم غير الموجود شرط مثالنا، ولا نعمم على كل البيئات. [1] [2] [3]

المراجع

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

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