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
これは当惑します。何が問題なのか正確にはわかりません。