如何使用pip安装地图/绘图库cartopy和底图

时间:2016-11-12 11:56:01

标签: python-2.7 gis gdal matplotlib-basemap cartopy

我了解在安装cartopy和底图之前需要满足一些依赖项。我使用pip(例如numpy等)整理了大部分内容。

我发现Proj.4存在一些 cartopy 问题,而GEOS存在一些底图问题。 我认为python与Java项目Proj.4的绑定已经足够了,我对C ++库GEOS有点失落(我认为GDAL对于GEOS来说已经足够了,我已经用这种方式将它链接到python世界:{{ 1}})。

我宁愿避开所有像蟒蛇,树冠等的东西。 如果可能的话,我只想在Ubuntu上使用pip install --global-option=build_ext --global-option="-I/usr/include/gdal" GDAL==`gdal-config --version pip,仅当apt-get不够时)和Mac OSX(自制文件,例如pip,仅在{{{ 1}}是不够的。)

cartopy 卡在了太旧的Proj.4版本上。 brew install <some_package>输出显示:pip。 我假设这个pip安装的python绑定已经足够了,但它没有解决问题:

Proj4 version 4.8.0 is installed, but cartopy requires at least version 4.9.0.

我不明白为什么python绑定到Proj.4是不够的,即使这些绑定是使用pip提供的最新版本。

底图以不同方式停滞不前:

  • $ pip show pyproj Name: pyproj Version: 1.9.5.1 Summary: Python interface to PROJ.4 library Home-page: https://github.com/jswhit/pyproj Author: Jeff Whitaker Author-email: jeffrey.s.whitaker@noaa.gov License: OSI Approved Location: /usr/local/lib/python2.7/dist-packages Requires: 某种方式使用pip
  • 但是从底图文档中我发现库由于某种原因没有链接到pip2 install basemap存储库,需要从源代码安装。所以我运行了Could not find a version that satisfies the requirement basemap (from versions: ) No matching distribution found for basemap 并且我相信会触发一个pip C ++代码编译,过了一段时间它会停在底部:

    pip2 install https://github.com/matplotlib/basemap/archive/v1.0.7rel.tar.gz

我不确定我做错了什么:

  • 如何向cartopy提供正确的Proj.4内容?实际上我更愿意找到一个较旧版本的cartopy,这对于现有版本的Proj.4来说很好(我假设它来自GEOS绑定)
  • 如何从我用In file included from src/_geoslib.c:255:0: /usr/include/geos_c.h:151:22: note: expected ‘GEOSMessageHandler’ but argument is of type ‘void (*)(char *, char *)’ extern void GEOS_DLL initGEOS(GEOSMessageHandler notice_function, ^ x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D_FORTIFY_SOURCE=2 -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/src/_geoslib.o -lgeos_c -lgeos -o build/lib.linux-x86_64-2.7/_geoslib.so /usr/bin/ld: cannot find -lgeos collect2: error: ld returned 1 exit status /usr/bin/ld: cannot find -lgeos collect2: error: ld returned 1 exit status error: Command "x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D_FORTIFY_SOURCE=2 -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/src/_geoslib.o -lgeos_c -lgeos -o build/lib.linux-x86_64-2.7/_geoslib.so" failed with exit status 1 ---------------------------------------- Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-QVrKRr-build/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-EgAOPT-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-QVrKRr-build/ 设置的GDAL链接中查找底图?如果这还不够,那么我该怎么做呢?也许GEOS包的一些pip install可以避免在底图安装中触发GEOS编译?

我对Java二进制文件,C ++二进制文件和python包绑定之间没有任何关系感到困惑。

1 个答案:

答案 0 :(得分:1)

正如您所注意到cartopy在版本&gt; = 4.9中需要Proj.4 lib。在Ubuntu(16.04以上),您可以通过sudo apt-get install libproj-dev安装它。

对于较旧的Ubuntu,例如14.04,您只需从16.04(host setting)下载最新的软件包并手动安装。请注意,它取决于xenial libproj-dev。在使用
更新它们之前,请务必删除旧版本 sudo apt-get purge libproj-dev libproj9 完成后,打开并从适当架构的链接下载软件包(从您的日志中我知道这是amd64)。双击下载的文件,按librproj9libproj-dev或使用 sudo dpkg -i <path_to_file>