Gibt es eine Möglichkeit, GeoIP unter Mac OS X über den Quellcode zu installieren?

7784
Richard

Ich möchte die MaxMind GeoIP C-Bibliothek installieren, damit ich GeoIP als Teil von Django verwenden kann . Ich arbeite an Mac OS X.

Ich habe GeoIP-1.4.8.tar.gzvon hier heruntergeladen und ausgeführt:

./configure make make check make install 

Ohne Probleme. Ich habe auch heruntergeladen GeoIP.dat.gzund GeoLiteCity.dat.gz, dekomprimiert sie und legte sie in einem lokalen Verzeichnis.

Dann habe ich folgende Pfade in mein gesetzt settings.py:

GEOIP_PATH = 'path_to_dat_files' GEOIP_LIBRARY_PATH = 'path_to_c_files' 

Jetzt versuche ich zu laufen python manage.py migrate(was einen Verweis auf GeoIP in einem von mir verwendeten Projekt hat), aber ich bekomme immer noch diesen Fehler:

from django.contrib.gis.utils import GeoIP ImportError: cannot import name GeoIP 

Irgendwelche Ideen?

1

3 Antworten auf die Frage

3
JakeGould

An dieser Stelle ist mir klar, dass diese Frage über 4 Jahre alt ist, aber ich wollte weitere Details dazu hinzufügen, wie Benutzer neuerer Versionen von Mac OS X wie Mac OS X 10.7 (Lion), Mac OS X 10.8 (Mountain Lion) und Mac OS X 10.9 (Mavericks) - können GeoIP auf ihren Computern installieren. Dies wurde von mir bis Mac OS X 10.9.5 getestet, aber ich glaube, dass genau die gleichen Anweisungen für Mac OS X 10.10 (Yosemite) funktionieren sollten.

Was die Integration von Python / Django angeht, bin ich ziemlich sicher, dass, wenn die GeoIP-Binärdatei und die zugehörigen Datenbanken systemweit ordnungsgemäß installiert werden, Sie sich nicht mit den GEOIP_PATHentsprechenden Einstellungen befassen müssen . Wäre aber offen für andere in den Kommentaren, wenn meine Annahme falsch ist.

Voraussetzungen.

Zunächst muss Xcode installiert sein. Und seit Xcode - ich glaube zumindest seit Version 4.3 - enthält die GNU-Versionen von nicht mehr autoconf, automakeund libtooldiese müssen ebenfalls installiert werden. Ich detaillierte Angaben darüber, wie die Installation autoconf, automakeund libtoolin dieser Antwort . Für den Rest dieser Antwort wird davon ausgegangen, dass Ihr System diese Einstellung bereits hat.

GeoIP von der Quelle installieren.

Mit den genannten Voraussetzungen können Sie die GeoIP von MaxMind wie folgt installieren.

Legen Sie das Arbeitsverzeichnis auf Ihr Basisverzeichnis fest:

cd 

Holen Sie sich den Quellcode und dekomprimieren Sie ihn:

curl -O http://www.maxmind.com/download/geoip/api/c/GeoIP-latest.tar.gz tar -xvzf GeoIP-latest.tar.gz 

Gehen Sie in das unkomprimierte Quellcode-Verzeichnis:

cd ./GeoIP* 

Führen Sie libtoolizeden Quellcode aus:

libtoolize -f 

Wenn dies erledigt ist, führen Sie das configureSkript im Quellcode aus:

./configure 

Führen makeSie jetzt aus, um es zu kompilieren:

make 

Dann lauf make check, um zu überprüfen, ob alles gut ist:

make check 

Jetzt installieren Sie es:

sudo make install 

Überprüfen Sie die Installation, indem Sie den geoiplookupBefehl ausführen, dessen Ausgabe etwa wie folgt aussehen sollte:

Usage: geoiplookup [-h] [-?] [-d custom_dir] [-f custom_file] [-v] [-i] [-l] <ipaddress|hostname> 

Jetzt haben Sie den GeoIP-Quellcode kompiliert, aber Sie haben keine GeoIP-Datenbanken installiert, auf denen / referenziert werden kann. Also lass uns sie installieren.

GeoIP-Datenbanken installieren.

Wir werden also die drei (3) großen GeoIP-Datenbanken, die so verfügbar sind, bekommen curl. Legen Sie das Arbeitsverzeichnis auf Ihr Basisverzeichnis fest:

cd 

Und jetzt verwenden curl, um die GeoIP.dat.gz, GeoLiteCity.dat.gzund GeoIPASNum.dat.gzDatenbanken zu erhalten:

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 

Verschieben Sie sie in das richtige Verzeichnis, damit das GeoIP-Programm darauf verweist /usr/local/share/GeoIP/. Wenn das Verzeichnis auf Ihrem System nicht vorhanden ist, können Sie es folgendermaßen machen:

sudo mkdir -p /usr/local/share/GeoIP/ 

Nun damit fertig, bewegen Sie die heruntergeladenen GeoIP.dat.gz, GeoLiteCity.dat.gzund GeoIPASNum.dat.gzDatenbanken in das Verzeichnis:

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/ 

Und dekomprimieren sie an Ort und Stelle:

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 

Wir müssen auch umbenennen, GeoLiteCity.datum GeoIPCity.datdies zu mögen:

sudo mv /usr/local/share/GeoIP/GeoLiteCity.dat /usr/local/share/GeoIP/GeoIPCity.dat 

Endgültiger GeoIP-Binärtest.

Wenn die GeoIP-Binärdatei aus der Quelle kompiliert und installiert ist und die Datenbanken installiert sind, geoiplookupsollte dies erwartungsgemäß funktionieren. Lassen Sie uns beispielsweise eine GeoIP-Suche bei Google durchführen:

geoiplookup google.com 

Die Ausgabe dieses Befehls sollte, wenn alles gut gelaufen ist, sein:

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. 
2
clsung

Ich folge einfach dem gleichen Verfahren und finde nichts falsches

./configure make make check make install 

und legen Sie die geo-unzip-ed-Datenbank in das root-Verzeichnis des django-Projekts. Fügen Sie Folgendes in die Datei settings.py ein:

GEOIP_PATH = "./" 

hier ist was ich laufe und bekam:

% python manage.py shell >>> from django.contrib.gis.utils import GeoIP >>> g = GeoIP() >>> g.country('google.com') {'country_name': 'United States', 'country_code': 'US'} >>>> 
0
sbaechler

Nach dem Kompilieren sollte der Bibliothekspfad gedruckt werden:

----------------------------------------------------------------------  Libraries have been installed in: /usr/local/lib 

Legen Sie den Pfad zur dylibDatei fest:

GEOIP_LIBRARY_PATH = '/usr/local/lib/libGeoIP.dylib' GEOIP_PATH = GEOIP_DATA_FILE