python: GeoDjango: Eclipse: Во время модульного теста выведите ImportError: «Не удалось импортировать настройки«% s »(это на sys.path? Есть ли синтаксические ошибки?) - PullRequest
0 голосов
/ 19 октября 2011

Я создаю py-файл юнит-теста (tests.py), затем я получил следующие сообщения об ошибках.Не могли бы вы дать мне некоторое представление о том, как ее решить.

pydev debugger: warning: psyco not available for speedups (the debugger will still work correctly, but a bit slower)
pydev debugger: starting
Finding files... done.
Importing test modules ... Traceback (most recent call last):
  File "C:\Development\eclipse-SDK-3.7-win32\plugins\org.python.pydev.debug_2.2.3.2011100616\pysrc\pydev_runfiles.py", line 307, in __get_module_from_str
    mod = __import__(modname)
  File "C:\Development\workspace37_pydev\pyproject\py23\service\rs\tests.py", line 4, in <module>
    from django.test.testcases import TestCase
  File "C:\Program Files\GeoDjango\Django-1.0.2-final\django\test\__init__.py", line 6, in <module>
    from django.test.testcases import TestCase
  File "C:\Program Files\GeoDjango\Django-1.0.2-final\django\test\testcases.py", line 10, in <module>
    from django.db import transaction
  File "C:\Program Files\GeoDjango\Django-1.0.2-final\django\db\__init__.py", line 9, in <module>
    if not settings.DATABASE_ENGINE:
  File "C:\Program Files\GeoDjango\Django-1.0.2-final\django\conf\__init__.py", line 28, in __getattr__
    self._import_settings()
  File "C:\Program Files\GeoDjango\Django-1.0.2-final\django\conf\__init__.py", line 59, in _import_settings
    self._target = Settings(settings_module)
  File "C:\Program Files\GeoDjango\Django-1.0.2-final\django\conf\__init__.py", line 94, in __init__
    raise ImportError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e)
ImportError: Could not import settings 'py23.settings' (Is it on sys.path? Does it have syntax errors?): No module named py23.settings
ERROR: Module: tests could not be imported (file: C:\Development\workspace37_pydev\pyproject\py23\service\rs\tests.py).
done.

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK

Любые указания о правильном направлении приветствуются.

ОБНОВЛЕНИЯ1 Я добавляю свой источник tests.pyкод

# -*- encoding:utf-8 -*-

from django.contrib.gis.geos import GEOSGeometry
from django.test.testcases import TestCase
from django.utils import simplejson as json
import unittest
import utils

class RSCapTestCase(TestCase):

    fixtures = [ 'rs.json' ]

    def test_001_normal(self):

        response = self.client.get('/service/rs/cap', {})
        cap = json.loads(response.content)

        self.assertEqual(response.status_code, 200)
        self.assertEqual(cap['version'], '1.0')
        self.assertEqual(len(cap['rs']), 3)
        self.assertEqual(cap['rs'][0], 'r1')
        self.assertEqual(cap['updateSequence'], '0001')

    def test_002_version(self):

        response = self.client.get('/service/rs/cap/1.0', {})
        cap = json.loads(response.content)

        self.assertEqual(response.status_code, 200)
        self.assertEqual(cap['version'], '1.0')
        self.assertEqual(len(cap['rs']), 3)
        self.assertEqual(cap['rs'][0], 'r1')
        self.assertEqual(cap['updateSequence'], '0001')

    def test_003_version_sequence(self):

        response = self.client.get('/service/rs/cap/1.0/0001', {})
        cap = json.loads(response.content)

        self.assertEqual(response.status_code, 200)
        self.assertEqual(cap['version'], '1.0')
        self.assertEqual(len(cap['rs']), 3)
        self.assertEqual(cap['rs'][0], 'r1')
        self.assertEqual(cap['updateSequence'], '0001')

ОБНОВЛЕНИЯ2 Я добавил следующий код

_ _ init _ _.py (та же папка с tests.py)

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'py23.settings'

Вот консоль, когда я выполняю tests.py

Finding files... done.
Importing test modules ... done.

======================================================================
ERROR: test_001_normal (py23.service.rs.tests.RSCapTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Program Files\GeoDjango\Django-1.0.2-final\django\test\testcases.py", line 202, in __call__
    self._pre_setup()
  File "C:\Program Files\GeoDjango\Django-1.0.2-final\django\test\testcases.py", line 183, in _pre_setup
    call_command('flush', verbosity=0, interactive=False)
  File "C:\Program Files\GeoDjango\Django-1.0.2-final\django\core\management\__init__.py", line 158, in call_command
    return klass.execute(*args, **options)
  File "C:\Program Files\GeoDjango\Django-1.0.2-final\django\core\management\base.py", line 210, in execute
    translation.activate('en-us')
  File "C:\Program Files\GeoDjango\Django-1.0.2-final\django\utils\translation\__init__.py", line 73, in activate
    return real_activate(language)
  File "C:\Program Files\GeoDjango\Django-1.0.2-final\django\utils\translation\__init__.py", line 43, in delayed_loader
    return g['real_%s' % caller](*args, **kwargs)
  File "C:\Program Files\GeoDjango\Django-1.0.2-final\django\utils\translation\trans_real.py", line 209, in activate
    _active[currentThread()] = translation(language)
  File "C:\Program Files\GeoDjango\Django-1.0.2-final\django\utils\translation\trans_real.py", line 198, in translation
    default_translation = _fetch(settings.LANGUAGE_CODE)
  File "C:\Program Files\GeoDjango\Django-1.0.2-final\django\utils\translation\trans_real.py", line 181, in _fetch
    app = getattr(__import__(appname[:p], {}, {}, [appname[p+1:]]), appname[p+1:])
AttributeError: 'module' object has no attribute 'messages'

.
.
.

----------------------------------------------------------------------
Ran 3 tests in 0.234s

FAILED (errors=43)

Ответы [ 2 ]

2 голосов
/ 26 июля 2012

Вот что я сделал, чтобы решить эту проблему без каких-либо изменений в коде:

  1. Перейти в свойства проекта в Eclipse
  2. Перейдите в «PyDev - PYTHONPATH», а затем на вкладку «Переменные подстановки строк» ​​
  3. Нажмите «Добавить переменную»
  4. Имя: "DJANGO_SETTINGS_MODULE", Значение: расположение вашего модуля настроек (например, "py23.settings" в ответе от эроса)

Это сделало это для меня, по крайней мере.

0 голосов
/ 26 октября 2011

Я просто добавляю следующее:

import os
from os.path import abspath, dirname
import sys

# Set up django
project_dir = abspath(dirname(dirname(__file__)))
sys.path.insert(0, project_dir)
os.environ['DJANGO_SETTINGS_MODULE'] = 'py23.settings'
...