Avatar ·

الاستيراد النسبي في Python

📁 بايثون, سؤال, مساعدة

منذ فترة (عندما تم إلغاء الاستيراد النسبي) لم أتمكن من حل هذه المشكلة بشكل طبيعي:

لنفترض أن هيكل البرنامج هو

app/    __init__.py    foo/        __init__.py        handler.py

كيف يمكنني من الوحدة handler.py تحميل شيء من الحزمة foo؟

المشكلة هي أن اسم الحزمة foo غير معروف في البداية، فأنا أقوم بتحميلها باستخدام importlib.

حتى الآن وجدت هذا الحل المؤقت: أقوم بقطع المتغير __name__، الذي في handler.py يساوي 'foo.handler'، أي هكذا

foo_name = __name__.rsplit('.', 1)[0]

ثم أقوم بتحميل الوحدة التي أحتاجها

needle_module = importlib.import_module('.' + <اسم الوحدة>, foo_name)

لكن، كما