2012-05-24 2 views
0

Я потратил несколько часов на то, чтобы решить проблемы, связанные с настройкой GeoIP в Django, но ничего не получилось и надеялся получить некоторые рекомендации относительно того, какие проблемы могут быть.Модуль Django GeoIP не найден

Я работаю над существующим приложением Django, которое требует некоторых способностей к геолокации, в частности, для получения IP-адресов пользователей и lat/long, а затем размещения этой информации на маркере. GeoIP и связанные с ним библиотеки оказались лучшим решением для первого шага.

Я установил GeoIP на Mac с помощью Homebrew. Затем я вручную создал папку в корневом каталоге моего проекта с файлами 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 

Я не могу показаться, чтобы решить эту проблему , Одной из проблем, которая может быть причиной, является извлечение двух файлов dat.gz. Также нельзя было распаковать файлы из командной строки - ни файлы .zip - и им пришлось использовать Stuffit Expander, чтобы открыть их. Результирующие файлы данных в моей IDE проекта (pyCharm) имеют значок 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 

Это недоумение. Не знаю, в чем проблема.

ответ

1

Сообщение о несоответствии с текстом означает, что библиотека, установленная вами libgeoIP, была построена с другой архитектурой процессора, чем архитектура, в которой работает интерпретатор Python. Из задействованных путей вы, по-видимому, используете более новую (поставляемую не Apple) Python 2.7. Скорее всего, libgeoIP был построен как 64-разрядный (-arch x86_64), а Python, который вы установили, представляет собой 32-битный - только Python 2.7 (-arch i386). Или, возможно, наоборот. В любом случае вы можете попробовать переустановить GeoIP с опцией universal, чтобы он содержал обе арки. Или вы можете попробовать переустановить Python 2.7 с использованием 64-разрядной/32-разрядной версии, такой как загружаемый с python.org.Вы можете увидеть наверняка, какие арки участвуют с помощью команды file:

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

Там должны быть по крайней мере одна общая архитектурой между ними.

+0

Ned: Как вы устанавливаете GeoIP с универсальной опцией? –

+0

Сначала сообщите о выходе из этих файлов, чтобы убедиться, что вы знаете, что такое на самом деле. –

+0

Python: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python: универсальный двоичный файл Mach-O с 2 архитектурой /Library/Frameworks/Python.framework/Versions/2.7/ Ресурсы/Python.app/Содержание/MacOS/Python (для архитектуры ppc): исполняемый файл Mach-O ppc /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python (для архитектуры i386): исполняемый файл Mach-O i386 –

0

Не проблема с вашими файлами dat. Его проблема с импортом, и он находит модуль GeoIP.

Из документов:
https://docs.djangoproject.com/en/1.4/ref/contrib/gis/geoip/

In Django 1.4, the GeoIP object was moved out of django.contrib.gis.utils and into its own module, django.contrib.gis.geoip. A shortcut is still provided in utils, but will be removed in Django 1.6.

Если вы используете Джанго 1.3.x, попробуйте:

from django.contrib.gis.utils import GeoIP 

Обратите внимание на разницу в пути импорта между этими двумя версиями:
https://docs.djangoproject.com/en/1.3/ref/contrib/gis/geoip/
https://docs.djangoproject.com/en/1.4/ref/contrib/gis/geoip/

+0

Спасибо. Это имеет смысл, но, к сожалению, возникает новая ошибка: >>> from django.contrib.gis.utils import GeoIP Traceback (последний последний звонок): Файл «», строка 1, in ImportError: can not import name GeoIP Любая идея, что это может быть? –

+0

@ Почему нет: вы уверены, что следовали за документом GeoDjango и правильно установили geoip maxmind? Кажется, что он построен неправильно. – jdi

+0

Я установил его с Brew, и у него возникли проблемы с разрешениями и ссылками, но они были исправлены с помощью скрипта. Оглядываясь, кажется, это может быть потому, что я использую 64-битную сборку Python вместо 32 бит. Не уверен. Был бы признателен за любую проницательность. –

1

Правильный способ импортировать GeoIP на Django 1.4 и выше (включая текущий 1,9-релиз) является:

from django.contrib.gis.geoip import GeoIP 
0
Previously i was facing this issue : from django.contrib.gis.geoip import GeoIP ImportError: cannot import name GeoIP 

Решение:

yum install GeoIP-devel -y 
Смежные вопросы