我花了几个小时试图解决我在 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
我似乎无法解决这个问题。一个可能的问题是提取两个 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
这令人困惑。不确定到底是什么问题。