MaxMind GeoIP Cライブラリ をインストールして、 Djangoの一部としてのGeoIP を使用できるようにします。私はMacOSXに取り組んでいます。
here からGeoIP-1.4.8.tar.gz
をダウンロードして、次を実行しました。
./configure
make
make check
make install
問題なく。また、GeoIP.dat.gz
とGeoLiteCity.dat.gz
をダウンロードし、解凍してローカルディレクトリに配置しました。
次に、settings.py
に次のパスを設定しました。
GEOIP_PATH = 'path_to_dat_files'
GEOIP_LIBRARY_PATH = 'path_to_c_files'
python manage.py migrate
(使用しているプロジェクトのGeoIPへの参照があります)を実行しようとしていますが、それでも次のエラーが発生します。
from Django.contrib.gis.utils import GeoIP
ImportError: cannot import name GeoIP
何か案は?
同じ手順を実行しただけで、何も問題は見つかりませんでした
./configure
make
make check
make install
そして、geo解凍されたデータベースをDjangoプロジェクトのルートディレクトリに置き、settings.pyに以下を追加します。
GEOIP_PATH = "./"
これが私が実行して得たものです:
% python manage.py Shell
>>> from Django.contrib.gis.utils import GeoIP
>>> g = GeoIP()
>>> g.country('google.com')
{'country_name': 'United States', 'country_code': 'US'}
>>>>
この時点で、この質問は約4歳以上であることに気付きましたが、Mac OS X 10.7(Lion)、Mac OS X 10.8(Mountain Lion)などの最新バージョンのMac OSXのユーザーがどのように使用しているかについてさらに詳しく説明したいと思います。およびMacOS X 10.9(Mavericks)-自分のマシンにGeoIPをインストールできます。これはMacOS X 10.9.5まで私がテストしましたが、Mac OS X 10.10(Yosemite)でもまったく同じ手順でうまくいくはずです。
Python/Djangoの統合に関する限り、GeoIPバイナリ(および関連するデータベース)がシステム全体に適切にインストールされていれば、GEOIP_PATH
または関連する設定をいじくり回す必要はないと確信しています。しかし、私の仮定が間違っていれば、コメントで他の人からの意見を聞くことができます。
まず、Xcodeをインストールする必要があります。また、Xcode以降(少なくともバージョン4.3以降)、必要なGNUバージョンのautoconf
、automake
、およびlibtool
は含まれていません。 この回答にautoconf
、automake
、libtool
をインストールする方法 の詳細を提供します。この回答の残りの部分は、システムにはすでにその設定があります。
前提条件をカバーしたら、次のようにMaxMindのGeoIPをインストールできます。
作業ディレクトリをホームディレクトリに設定します。
cd
ソースコードを取得して解凍します。
curl -O http://www.maxmind.com/download/geoip/api/c/GeoIP-latest.tar.gz
tar -xvzf GeoIP-latest.tar.gz
圧縮されていないソースコードディレクトリに移動します。
cd ./GeoIP*
ソースコードでlibtoolize
を実行します。
libtoolize -f
それが完了したら、ソースコードでconfigure
スクリプトを実行します。
./configure
次に、make
を実行してコンパイルします。
make
次に、make check
を実行して、すべてが正常であることを確認します。
make check
今それをインストールします:
Sudo make install
geoiplookup
コマンドを実行してインストールされていることを確認します。このコマンドの出力は、次のようになります。
Usage: geoiplookup [-h] [-?] [-d custom_dir] [-f custom_file] [-v] [-i] [-l] <ipaddress|hostname>
これでGeoIPソースコードがコンパイルされましたが、使用/参照するためのGeoIPデータベースがインストールされていません。それでは、それらをインストールしましょう。
そこで、このようにcurl
で利用できる3つの主要なGeoIPデータベースを取得します。作業ディレクトリをホームディレクトリに設定します。
cd
次に、curl
を使用してGeoIP.dat.gz
、GeoLiteCity.dat.gz
、およびGeoIPASNum.dat.gz
データベースを取得します。
curl -O http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
curl -O http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
curl -O http://geolite.maxmind.com/download/geoip/database/asnum/GeoIPASNum.dat.gz
それが終わったら、GeoIPプログラムが参照するための適切なディレクトリである/usr/local/share/GeoIP/
にそれらを移動しましょう。そのディレクトリがシステムに存在しない場合は、次のようにすることができます。
Sudo mkdir -p /usr/local/share/GeoIP/
これで、ダウンロードしたGeoIP.dat.gz
、GeoLiteCity.dat.gz
、およびGeoIPASNum.dat.gz
データベースをそのディレクトリに移動します。
Sudo mv ~/GeoIP.dat.gz /usr/local/share/GeoIP/
Sudo mv ~/GeoLiteCity.dat.gz /usr/local/share/GeoIP/
Sudo mv ~/GeoIPASNum.dat.gz /usr/local/share/GeoIP/
そして、それらを所定の位置で解凍します。
Sudo gzip -d -f /usr/local/share/GeoIP/GeoIP.dat.gz
Sudo gzip -d -f /usr/local/share/GeoIP/GeoLiteCity.dat.gz
Sudo gzip -d -f /usr/local/share/GeoIP/GeoIPASNum.dat.gz
また、次のようにGeoLiteCity.dat
の名前をGeoIPCity.dat
に変更する必要があります。
Sudo mv /usr/local/share/GeoIP/GeoLiteCity.dat /usr/local/share/GeoIP/GeoIPCity.dat
GeoIPバイナリをソースからコンパイルしてインストールし、データベースを配置すると、geoiplookup
は期待どおりに機能するはずです。たとえば、GoogleでGeoIPルックアップを実行してみましょう。
geoiplookup google.com
すべてがうまくいった場合のそのコマンドの出力は次のようになります。
GeoIP Country Edition: US, United States
GeoIP City Edition, Rev 1: US, CA, California, Mountain View, 94043, 37.419201, -122.057404, 807, 650
GeoIP ASNum Edition: AS15169 Google Inc.
コンパイル後、ライブラリパスを出力する必要があります。
----------------------------------------------------------------------
Libraries have been installed in: /usr/local/lib
dylib
ファイルへのパスを設定します。
GEOIP_LIBRARY_PATH = '/usr/local/lib/libGeoIP.dylib'
GEOIP_PATH = GEOIP_DATA_FILE