我想安装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
我只是按照同样的程序,并没有发现任何问题
./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'}
>>>>
答案2
我意识到这个问题已经存在 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。
满足先决条件后,您可以按如下方式安装 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 数据库以供使用/参考。因此让我们安装它们。
安装 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 二进制测试。
从源代码编译并安装 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.
答案3
编译后它应该打印库路径:
----------------------------------------------------------------------
Libraries have been installed in: /usr/local/lib
设置文件路径dylib
:
GEOIP_LIBRARY_PATH = '/usr/local/lib/libGeoIP.dylib'
GEOIP_PATH = GEOIP_DATA_FILE