使用Django包的Intermittent ImportError

时间:2015-09-02 19:52:36

标签: django gis geoip django-1.4 django-contrib

我在Python 2.7.6中运行的Django 1.4项目中有以下导入行:

from django.contrib.gis.utils import GeoIP

此行在生产和开发过程中100%正常工作,但这行在测试中失败并出现ImportError - 有时候。鉴于以下虚拟测试:

from django.test import TestCase
from django.test.client import Client

class DummyTestCase(TestCase):
    def test_GET_200_response_code(self):
        c = Client()
        response = c.get('/')
        self.assertEqual(response.status_code, 200)

如果我只运行此模块中的测试,它会在response = self.c.get('/')行上失败:

...
File "...", line 19, in <module>  
    from django.contrib.gis.utils import GeoIP
ImportError: cannot import name GeoIP

然而当我运行整个测试套件(包括同样的测试)时,它会毫无问题地通过。而且,导入在控制台以及开发和生产服务器中都可以正常工作。

那么......为什么会这样?为什么我只在运行这个单个测试模块时才会得到一个ImportError,否则,即使我运行包括这个模块在内的所有测试?

注意:我现在正在使用Django 1.4。我知道导入路径会发生变化并且会from django.contrib.gis.geoip import GeoIP,但是来自utils的快捷方式仍然存在于1.4中,直到1.6。无论哪种方式,切换导入路径都表现出与上述相同的行为。

1 个答案:

答案 0 :(得分:-1)

我认为这是你的answer,看起来像django 1.4它在不同的包中:django.contrib.gis.geoipdjango.contrib.gis.utils快捷方式已在django 1.6中删除,所以我建议在测试服务器上调查django版本。如果使用django&gt; = 1.4,首先尝试将导入更改为django.contrib.gis.geoip,并且您不必进行任何调查。