Есть ли способ установить GeoIP из исходного кода на Mac OS X?

7779
Richard

Я хочу установить библиотеку MaxMind GeoIP C, чтобы я мог использовать GeoIP как часть Django . Я работаю на Mac OS X.

Я скачал 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 

Есть идеи?

1

3 ответа на вопрос

3
JakeGould

Я понимаю, что на данный момент этому вопросу уже более 4 лет, но я хотел бы добавить дополнительные сведения о том, как пользователи более современных версий Mac OS X - таких как Mac OS X 10.7 (Lion), Mac OS X 10.8 (Mountain Lion) и Mac OS X 10.9 (Mavericks) - можно установить GeoIP на своих компьютерах. Это было проверено мной до Mac OS 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в этом ответе . Остальная часть этого ответа предполагает, что ваша система уже имеет эту настройку.

Установка GeoIP из источника.

С учетом предварительных условий вы можете установить GeoIP MaxMind следующим образом.

Установите рабочий каталог в свой домашний каталог:

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 для его использования / ссылки. Итак, давайте установим их.

Установка баз данных GeoIP.

Таким образом, мы собираемся получить три (3) основные базы данных GeoIP, которые доступны там с curlэтим. Установите рабочий каталог в свой домашний каталог:

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.

Бинарный файл GeoIP, скомпилированный из исходного кода и установленный, а также имеющий базы данных, geoiplookupдолжен работать как положено. Например, давайте сделаем поиск GeoIP в Google:

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

Я просто следую той же процедуре и не нашел ничего плохого

./configure make make check make install 

и поместите распакованную базу геоданных в корневой каталог проекта 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'} >>>> 
0
sbaechler

После компиляции следует распечатать путь к библиотеке:

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

Установите путь к dylibфайлу:

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