حل مشكلة ModuleNotFoundError في GitHub Actions باستخدام pytest
تواجه العديد من المطورين عند استخدامهم أدوات اختبار بايثون مثل pytest
في بيئات مثل GitHub Actions مشاكل شائعة، ومنها الخطأ المعروف بـ ModuleNotFoundError: No module named. ظهور هذا الخطأ قد يشكل عائقًا أثناء تنفيذ الاختبارات، خاصة عندما تعمل الاختبارات محليًا دون مشاكل. في هذا المقال، سنستعرض بعض الأسباب المحتملة وراء ظهور هذا النوع من الأخطاء والحلول الممكنة التي يمكن أن تساعد في تجاوز هذه المشكلة.
أسباب ظهور الخطأ
يتسبب الخطأ ModuleNotFoundError: No module named غالبًا بسبب عدم قدرة Python على العثور على وحدة أو حزمة معينة. في الحالة التي تم الإشارة إليها في السؤال، نجد أن هناك بنية متعددة المستويات للمجلدات، مما قد يؤثر على كيفية استيراد الوحدات. عندما يقوم pytest
بالبحث عن الملفات في مجلدات الاختبار، يجب أن تكون المسارات صحيحة وقابلة للإعداد ضمن بيئة التنفيذ.
التأكد من هيكلة المشروع بشكل صحيح
تعتبر هيكلة المشروع مهمة جدًا. في حالة المثال المعطى، يجب التأكد من أن المسارات المستخدمة في استيراد الوحدات صحيحة. على سبيل المثال، إذا كنت تستخدم from tests.model import test_streamlit
، يجب أن تتأكد من أن مجلد tests
مُعترف به كمجلد بايثون من خلال وجود ملف __init__.py
في كل من المجلدات الرئيسية.
ملف GitHub Actions
من الضروري التأكد من أن ملف GitHub Actions (.github/workflows/...
) تم إعداده بشكل صحيح. يجب أن يتضمن جميع الخطوات المطلوبة لتحميل الحزم اللازمة قبل محاولة تشغيل الاختبارات. كما يجب أن يتم تحديد المسار الصحيح إلى متطلبات المشروع (requirements.txt
). إذا كانت هناك ملفات متطلبات مختلفة لكل مشروع، فيجب تحديد الملف الصحيح الذي يحتوي على الاعتماديات اللازمة.
الحلول المقترحة
الحل الأول الذي يمكن تجربته هو استخدام المسار الكامل للوحدة عند استيرادها في الملفات الاختبارية. بدلاً من استخدام أسماء هياكل بسيطة، يمكن استخدام المسار النسبي أو المطلق، مباشرة إلى حيث توجد الوحدات.
كما يجب التأكد من استخدام pytest
بشكل صحيح. يمكن أن تتطلب بعض المشاريع إعداد بعض المتغيرات البيئية أو ضبط المتغير PYTHONPATH
ليشمل المسارات الصحيحة.
استخدام Pytest بشكل فعال
يمكن للمستخدمين أيضا تشغيل pytest
باستخدام خيارات مثل --rootdir
لتحديد المجلد الجذري للمشروع. مثال على ذلك:
pytest --rootdir=homework_9/pr1
هذا يضمن أن pytest
يبحث في المكان الصحيح ضمن هيكلية المشروع عن الوحدات اللازمة للتشغيل.
خلاصة
ليس من غير المعتاد أن تواجه خطأ ModuleNotFoundError: No module named أثناء اختبار البرامج، خاصة في بيئات CI/CD مثل GitHub Actions. من الضروري مراجعة بنية المشروع، والتأكد من إعداد المسارات بشكل صحيح، واستخدام أدوات مثل pytest
بكفاءة. إذا تم تطبيق الحلول المقترحة، فمن المحتمل أن يتلاشى هذا الخطأ، مما يسمح لك بإجراء اختباراتك بنجاح.
تأكد من مراجعة جميع الإعدادات والتأكد من أنها تلبي احتياجات المشروع الخاص بك، وأن جميع الاعتماديات مكتملة. عبر هذه الخطوات والحلول، يمكنك تخطي العقبات التي يفرضها هذا الخطأ وتقديم اختبارات موثوقة لبرامجك.