我在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。无论哪种方式,切换导入路径都表现出与上述相同的行为。
答案 0 :(得分:-1)
我认为这是你的answer,看起来像django 1.4它在不同的包中:django.contrib.gis.geoip
和django.contrib.gis.utils
快捷方式已在django 1.6中删除,所以我建议在测试服务器上调查django版本。如果使用django&gt; = 1.4,首先尝试将导入更改为django.contrib.gis.geoip
,并且您不必进行任何调查。