在OSX上缺少libgeos_c.so

mbr*_*chh 13 django postgresql macos homebrew postgis

我正在尝试安装Postgis以便在OSX上使用GeoDjango.

为此,我首先完全卸载了postgres,然后按照GeoDjango文档安装了所有内容:https://docs.djangoproject.com/en/dev/ref/contrib/gis/install/#homebrew

我做了以下事情:

brew update
brew upgrade
brew install postgresql
brew install postgis
brew install gdal
brew install libgeoip
Run Code Online (Sandbox Code Playgroud)

当我运行我的Django项目时,我收到以下错误:

OSError at / dlopen(/usr/local/lib/libgeos_c.so, 6): image not found
Run Code Online (Sandbox Code Playgroud)

我跑了

sudo find . -name "libgeos_c*"
Run Code Online (Sandbox Code Playgroud)

得到了:

./Library/Frameworks/GEOS.framework/Versions/3/unix/lib/libgeos_c.dylib
./Users/martin/opt/geos-3.3.0/capi/.deps/libgeos_c_la-geos_c.Plo
./Users/martin/opt/geos-3.3.0/capi/.deps/libgeos_c_la-geos_ts_c.Plo
./usr/local/Cellar/geos/3.3.3/lib/libgeos_c.1.dylib
./usr/local/Cellar/geos/3.3.3/lib/libgeos_c.a
./usr/local/Cellar/geos/3.3.3/lib/libgeos_c.dylib
./usr/local/Cellar/geos/3.3.4/lib/libgeos_c.1.dylib
./usr/local/Cellar/geos/3.3.4/lib/libgeos_c.a
./usr/local/Cellar/geos/3.3.4/lib/libgeos_c.dylib
./usr/local/Cellar/geos/3.3.5/lib/libgeos_c.1.dylib
./usr/local/Cellar/geos/3.3.5/lib/libgeos_c.a
./usr/local/Cellar/geos/3.3.5/lib/libgeos_c.dylib
./usr/local/lib/libgeos_c.1.dylib
./usr/local/lib/libgeos_c.a
./usr/local/lib/libgeos_c.dylib
Run Code Online (Sandbox Code Playgroud)

如您所见,根本没有".so"文件.有什么建议?

编辑:

出于绝望,我还安装了KyngChaos包并添加了以下设置:

GEOS_LIBRARY_PATH = '/Library/Frameworks/GEOS.framework/GEOS' 
GDAL_LIBRARY_PATH = '/Library/Frameworks/GDAL.framework/GDAL' 
GEOIP_LIBRARY_PATH = '/usr/local/Cellar/geoip/1.4.8/lib/libGeoIP.dylib'
Run Code Online (Sandbox Code Playgroud)

这解决了这个问题.

nic*_*bot 19

对不起,KyngChaos解决方案完全违背了使用自制程序的目的.

自制软件用户(至少对于这个用户)的答案是卸载geos及其依赖项,然后重新安装geos,然后重新安装它的依赖项.

这对我有用:

brew uninstall geos gdal geoip libspatialite librasterlite spatialite-gui spatialite-tools
brew cleanup
brew install geos
brew install gdal geoip libspatialite librasterlite spatialite-gui spatialite-tools
brew cleanup
Run Code Online (Sandbox Code Playgroud)

似乎一些geos依赖关系变得不同步.

您可以通过跟踪返回的内容来验证需要安装的库:

python -c 'import _ctypes; _ctypes.dlopen("/usr/local/lib/libgdal.dylib")'
Run Code Online (Sandbox Code Playgroud)

你会看到类似的东西

Reason: Incompatible library version: [some geos dependent library].dylib requires version X.X.X or later, but libgeos_c.1.8.0.dylib provides version X.X.X.

brew uninstall [some geos dependency]
brew install [some geos dependency]
brew cleanup
Run Code Online (Sandbox Code Playgroud)

然后重新运行上面的python命令,问题将得到解决,或者它将显示卸载/安装的另一个依赖项.