4

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れ、. どちらの方法でも、インポート パスを切り替えると、上記と同じ動作が示されます。

4

1 に答える 1

-1

これがあなたの答えだと思います.django 1.4以降は別のパッケージになっdjango.contrib.gis.geoipdjango.contrib.gis.utilsいるようです.django 1.6ではショートカットが削除されているため、テストサーバーでdjangoのバージョンを調査することをお勧めします. django>=1.4 を使用している場合は、最初に import を 1.4 に変更してみてくださいdjango.contrib.gis.geoip。何も調べる必要はありません。

于 2015-09-03T11:22:11.180 に答える