دليل العمل الحالي غير موجود في sys.path لذا لا يمكنه العثور على ملف الإعدادات ... الآن أتساءل ما هي الطريقة "النظيفة" لإصلاح ذلك.
ليس لدي مشكلة في تشغيل أجزاء أخرى من py.test ولكن لا تستطيع وحدة pytest_django العثور على الإعدادات الخاصة بي.
تشبه بنية ملفي تقريبًا ما يلي:
project_directory/settings.py
project_directory/app_1/
project_directory/app_2/
project_directory/manage.py
من الواضح أن manage.py
ليس لديه مشاكل في استيراد الإعدادات.
يتم استدعاء Py.test على النحو التالي:
py.test --ds settings
الاستثناء:
_pytest.config.UsageError: Could not import settings 'settings' (Is it on sys.path? Is there an import error in the settings file?): No module named settings
ما هي الطريقة الصحيحة لإصلاح هذا؟ أعلم أنه يمكنني تعيين المتغير PYTHONPATH
في بيئتي ، لكن هذا يبدو مجرد اختراق. لماذا لا يقوم pytest_django بالاستيراد من الدليل الحالي كما تتوقع؟
من أجل الوضوح ، شيء من هذا القبيل يعمل بدون مشكلة بالطبع:
في ملف يسمى test_settings.py
:
import settings
assert settings
يعمل على هذا النحو: py.test test_settings.py
Nevermind ... لقد عثرت للتو على عنصر الأسئلة الشائعة الذي ينص على تثبيت الحزمة محليًا. ليست أجمل طريقة imho ولكنها على الأقل حل نظيف :)
إنه موجود في الأسئلة الشائعة (http://pytest-django.readthedocs.org/en/latest/faq.html#i-see-an-error-saying-could-not-import-myproject-settings) ولكني أعتقد أنه ليس كذلك واضح بشكل كافي.
إنه خطأ (أو ربما ميزة؟) في اختبار py.test. هناك طريقتان لحل هذا:
أنا شخصياً أعتقد أن setup.py هو الخيار الأفضل إذا كنت تستخدمه بالفعل لتوزيع الكود الخاص بك. إذا لم يكن كذلك فسأذهب مع خيارات أخرى.
setup.py هو الحل الحالي ولكنه ليس أجمل حل على ما أعتقد. سيكون من المفيد أن يعطي pytest خطأ أوضح إلى حد ما في هذا الصدد.
ربما يجب على pytest_django إلحاق دليل العمل الحالي (على سبيل المثال sys.path.append('.')
) بـ sys.path
. إنها imho مخيفة بعض الشيء لكنها الطريقة الوحيدة التي يمكن أن يعمل بها pytest_django لذلك لا توجد طريقة للتغلب عليها على أي حال. تضيف جميع الحلول المقترحة بشكل فعال الدليل إلى sys.path
على أي حال فلماذا تتجنبه :)
يا رفاق ، يجب أن يكون هذا أكثر وضوحا. كنت أعاني من هذا إلى حد ما ، عندما خطرت لي فكرة البحث عن القضايا المغلقة ...
نظرًا لأن هذه المشكلة تظهر بالفعل في نتائج البحث ، أود إضافة أبسط حل بديل لـ afaik:
manage.py
بإضافة django_find_project = false
إلى pytest.ini
pytest-pythonpath
لمتطلبات الاختبار أو pip install pytest-pythonpath
. يبدو أن هذا يضيف cwd
إلى المسار تلقائيًا ، لذلك لم أضطر إلى تكوين أي شيء آخر.http://pytest-django.readthedocs.io/en/latest/managing_python_path.html#managing -the-python-path-بشكل صريح
لقد واجهت هذه المشكلة أثناء وجود ملف pytest.ini زائف:
[pytest]
DJANGO_SETTINGS_MODULE = "project.settings"
إزالة الاقتباسات إصلاحها:
[pytest]
DJANGO_SETTINGS_MODULE = project.settings
التعليق الأكثر فائدة
يا رفاق ، يجب أن يكون هذا أكثر وضوحا. كنت أعاني من هذا إلى حد ما ، عندما خطرت لي فكرة البحث عن القضايا المغلقة ...