记录一下pip安装cartopy遇到的问题:
一切问题起源:官方没有提供whl文件,而且正好那段时间 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 网站出错了,这个唯一一个提供了whl文件的镜像网站(不过现在恢复可以用了)
为了解决问题,重新了解了如何从源码安装pyhton库,于是下载了cartopy源码,准备自己编译生成whl文件,结果问题重重。
主要问题是:cartopy编译的时候依赖两个第三方库:geos和proj,而这两个是c/c++语言库,因此需要先下载并编译好这2个库。
如何编译c/c++库,好在我有一点基础,使用cmake有惊无险的编译好了geos库;
但是,编译proj库又遇到问题,编译的时候proj又依赖了sqlite、tiff等库(没错,不止2个库),等我把所有依赖的这些库都下载也编译好后,环境也配置了一遍,最后终于把proj给编译好了。
现在cartopy的依赖都编译好了,然后以为可以顺利安装,结果又出问题,setup.py文件里没找到我编译好的geos、proj,不过这是小问题,我直接把geos、proj库的位置在代码里指定,然后愉快地开始运行 python setup.py bdist-wheel
。
这时候,又给我放大招,编译的时候找不到vc++编译器,平时用的都是mingw,为了编译一个python库要安装visual studio???那绝对不可能,因此查了下发现可以在setup.cfg添加下面这2行,然后就可以使用mingw编译了
[build_ext]
compiler=mingw32
这时候编译还出一个问题,trace.cpp里有一个除0操作,于是改了下,终于编译成功,得到了cartopy的whl文件。
但是事情并没有结束,当我安装好cartopy后,拿个例子试一下的时候,发现DLL文件找不到,搞一天没解决。不想搞了,于是先用basemap把任务做了先。后面cartopy这件事就被搁置一边了。
之后过了2周,又想起这件事,又弄了几个小时,还是没解决。偶然发现网站https://www.lfd.uci.edu/~gohlke/pythonlibs/恢复了,于是从上面下载了cartopy,运行例子时还出错,这时候我觉察到事情好像并不简单,把pyproj、shapely卸载了也从上面这个网站下载,这才最终解决问题。
到这时才发现,shapely提供的geos_c.dll和pyproj提供的proj.dll文件并不是我自己编译的,而且这两也不是用mingw编译的,所以可能导致我自己编译的cartopy根这两个依赖库不兼容,而在那个网站下载的,也许人家都是采用vc++编译器编译,所以不会有问题。。。
折腾许久,最终还是靠从网站下载解决问题[大哭]
最后,把这几个库放蓝奏云网盘https://ajream.lanzoup.com/i9KWk0zble7e里了,避免上面这个网站又出问题