有没有办法在 Mac OS X 上从源代码安装 GeoIP?

有没有办法在 Mac OS X 上从源代码安装 GeoIP?

我想安装MaxMind GeoIP C 库,这样我就可以使用GeoIP 作为 Django 的一部分。我正在使用 Mac OS X。

我已经GeoIP-1.4.8.tar.gz这里并运行:

./configure
make
make check
make install

没有任何问题。我还下载了GeoIP.dat.gzGeoLiteCity.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 版本autoconfautomake因此libtool也需要安装这些版本。我提供了有关如何安装autoconfautomake以及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.gzGeoLiteCity.dat.gzGeoIPASNum.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.gzGeoLiteCity.dat.gzGeoIPASNum.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

相关内容