0

Django で GeoIP を設定する際の問題を解決するために数時間を費やしましたが、問題が何であるかについてのガイダンスが得られることを望んでいました。

私は、いくつかのジオロケーション機能を必要とする既存の Django アプリケーションに取り組んでいます。具体的には、ユーザーの IP と緯度/経度を取得し、その情報をマップ マーカーに配置します。GeoIP と関連ライブラリは、最初のステップに最適なソリューションのように見えました。

Homebrew を使用して Mac に GeoIP をインストールしました。次に、プロジェクトのルート ディレクトリに、GeoIPv6.data ファイルと GeoLiteCity.dat ファイルを含むフォルダーを手動で作成しました。この後、設定ファイルにパスを追加しました:

import os

DEBUG = True
TEMPLATE_DEBUG = DEBUG

BASE_DIR = os.path.dirname(os.path.abspath(__file__))

GEOIP_PATH = os.path.join(BASE_DIR, 'geoip'),

次に、プロジェクトのコマンド シェルを開いたところ、次のエラーが表示されました。

>>> from django.contrib.gis.geoip import GeoIP
Traceback (most recent call last):
  File "<console>", line 1, in <module>
ImportError: No module named geoip

この問題を解決できないようです。原因である可能性がある 1 つの問題は、2 つの dat.gz ファイルの抽出に問題があったことです。どちらもコマンド ラインから解凍できず (.zip ファイルも同様)、これらを開くには Stuffit Expander を使用する必要がありました。プロジェクト IDE (pyCharm) の結果の dat ファイルには、それぞれに VLC (?) アイコンがあります。おそらくこれが問題の一部です (ファイルを解凍する方法を見つけること自体が課題でした)。モジュールが見つからなかったのでわかりません。

何が問題なのかを理解せずにこれ以上先に進むことはできないため、この問題を解決するための助けをいただければ幸いです。

どうもありがとう。

*編集。さて、不適切なインポートステートメントが問題であった可能性があるように最初に見えました。修正しました: django.contrib.gis.utils.geoip から GeoIP をインポートします。残念ながら、修正すると、次のエラーが発生します。

>>> from django.contrib.gis.utils.geoip import GeoIP
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/contrib/gis/utils/geoip.py", line 68, in <module>
    lgeoip = CDLL(lib_path)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: dlopen(/usr/local/lib/libGeoIP.dylib, 6): no suitable image found.  Did find:
        /usr/local/lib/libGeoIP.dylib: mach-o, but wrong architecture

これは当惑します。何が問題なのか正確にはわかりません。

4

4 に答える 4

1

アーチの不一致メッセージは、libgeoIPインストールしたライブラリが、Pythonインタープリターが実行されているアーキテクチャとは異なるCPUアーキテクチャで構築されたことを意味します。関連するパスから、新しい(Appleが提供していない)Python2.7を使用しているように見えます。インストールしたPythonが32ビットのみのPython2.7()であるのに対し、はlibgeoIP64ビット()としてビルドされた可能性があります。またはおそらくその逆。いずれの場合も、両方のアーチが含まれるように、オプションを指定してGeoIPを再インストールしてみてください。または、python.orgからダウンロード可能な64ビット/32ビットバージョンを使用してPython2.7を再インストールしてみてください。次のコマンドを使用して、どのアーチが関係しているかを確認できます。-arch x86_64-arch i386universalfile

$ file /usr/local/lib/libGeoIP.dylib
$ file $(python2.7 -c 'import sys;print(sys.executable)')

2つの間に少なくとも1つの共通のアーキテクチャが必要です。

于 2012-05-25T01:59:00.220 に答える
1

Django 1.4 以降 (現在の 1.9 リリースを含む) で GeoIP をインポートする適切な方法は次のとおりです。

from django.contrib.gis.geoip import GeoIP
于 2015-12-03T16:01:04.153 に答える
0

dat ファイルの問題ではありません。import ステートメントに問題があり、GeoIP モジュールを見つけています。

ドキュメントから:
https://docs.djangoproject.com/en/1.4/ref/contrib/gis/geoip/

Django 1.4 では、GeoIP オブジェクトが django.contrib.gis.utils から移動され、独自のモジュール django.contrib.gis.geoip に移動されました。ショートカットは引き続き utils で提供されますが、Django 1.6 で削除されます。

django 1.3.x を使用している場合は、次を試してください。

from django.contrib.gis.utils import GeoIP

これら 2 つのバージョンのインポート パスの違いに注意してください:
https://docs.djangoproject.com/en/1.3/ref/contrib/gis/geoip/
投稿/gis/geoip/

于 2012-05-24T23:19:14.260 に答える
0
Previously i was facing this issue : from django.contrib.gis.geoip import GeoIP ImportError: cannot import name GeoIP

解決 :

yum install GeoIP-devel -y
于 2016-11-11T06:56:47.903 に答える