【问题标题】:Intermittent ImportError with Django packageDjango包的间歇性ImportError
【发布时间】:2015-11-28 11:31:01
【问题描述】:

我在 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。无论哪种方式,切换导入路径都会显示与上述相同的行为。

【问题讨论】:

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


    【解决方案1】:

    我认为这是你的answer,看起来从 django 1.4 开始它在不同的包中:django.contrib.gis.geoipdjango.contrib.gis.utils 快捷方式已在 django 1.6 中删除,所以我建议在测试服务器上调查 django 版本。如果使用 django>=1.4,首先尝试将 import 更改为 django.contrib.gis.geoip,这样您就无需进行任何调查。

    【讨论】:

    • 请看我原帖底部的注释。旧的导入路径在 1.4 中仍然有效,即使更改它也不能解决这个问题。
    猜你喜欢
    • 2017-05-28
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 2014-07-13
    • 2015-04-25
    • 2017-05-02
    • 1970-01-01
    • 2010-12-03
    相关资源
    最近更新 更多