Pytest-django: لا يمكن لـ Pytest العثور على الإعدادات

تم إنشاؤها على ٢٠ نوفمبر ٢٠١٣  ·  7تعليقات  ·  مصدر: pytest-dev/pytest-django

دليل العمل الحالي غير موجود في 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 بالاستيراد من الدليل الحالي كما تتوقع؟

التعليق الأكثر فائدة

يا رفاق ، يجب أن يكون هذا أكثر وضوحا. كنت أعاني من هذا إلى حد ما ، عندما خطرت لي فكرة البحث عن القضايا المغلقة ...

ال 7 كومينتر

من أجل الوضوح ، شيء من هذا القبيل يعمل بدون مشكلة بالطبع:

في ملف يسمى 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. هناك طريقتان لحل هذا:

  • فقط اضبط متغير بيئة PYTHONPATH ليشمل دليل المشروع
  • أدخل مسار مشروعك في sys.path في ملف conftest.py
  • إذا كنت تستخدم virtualenvwrapper ، فاستخدم البرنامج النصي add2virtualenv
  • يمكنك كتابة برنامج نصي setup.py مناسب ، والذي سيعدل مسار Python تلقائيًا (عبر ملفات .pth) عند تثبيته في وضع التطوير

أنا شخصياً أعتقد أن 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
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات