"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا تقوم بايثون بإلقاء خطأ \"ValueError: محاولة استيراد نسبي خارج حزمة المستوى الأعلى\" وكيف يمكن تجنبه؟

لماذا تقوم بايثون بإلقاء خطأ \"ValueError: محاولة استيراد نسبي خارج حزمة المستوى الأعلى\" وكيف يمكن تجنبه؟

تم النشر بتاريخ 2024-11-17
تصفح:728

Why Does Python Throw a \

الاستيراد النسبي خارج حزمة المستوى الأعلى

عند محاولة الاستيراد النسبي ضمن حزمة بايثون متعددة المستويات، قم بتشغيل الوحدة من دليل الحزمة يمكن أن يؤدي إلى الخطأ "ValueError: محاولة الاستيراد النسبي خارج حزمة المستوى الأعلى". يعد فهم السبب وراء هذا الخطأ أمرًا بالغ الأهمية لإدارة الحزم بشكل فعال.

يحدث الخطأ لأن Python لا تحتفظ بسجل للمكان الذي يتم منه تحميل الحزم. يؤدي تنفيذ وحدة كـ "python -m test_A.test" إلى إعلام Python بشكل أساسي بأن test_A.test غير موجود داخل الحزمة (على الرغم من وجوده في package/test_A). وبالتالي، فإن محاولة "من ..A import foo" تصبح غير صالحة لأن بايثون تفتقر إلى المعرفة بكون test_A جزءًا من حزمة أكبر.

في المقابل، فإن استخدام "python -m package.test_A.test" يحافظ على البنية الهرمية ويسمح بحل "من ..A import foo" بنجاح. إنه يعكس بدقة حقيقة أن test_A هو دليل فرعي ضمن "حزمة" الحزمة المحملة.

السبب الأساسي وراء عدم اعتبار بايثون دليل العمل الحالي حزمة غير معروف. ومع ذلك، يمكن تخفيف هذا القيد من خلال الإعلان صراحةً عن الدلائل كحزم باستخدام الملف "__init__.py" والالتزام بآلية البحث عن حزم Python عند استيراد الوحدات.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3