我在运行flask的python脚本中使用gdal(在apache + mod_wsgi上)。启动服务器时出现此错误:
ImportError: /usr/bin/anaconda/lib/python2.7/site-packages/osgeo/../../.././libcurl.so.4: undefined symbol: SSLv2_client_method
导入gdal时生成错误:
from osgeo import gdal
问题是,当从同一个python解释器的控制台运行该命令(导入gdal)时,它可以正常工作......但是当它运行与WSGI守护程序相同的脚本时它将无法工作。
我的wsgi文件如下:
<VirtualHost *:80>
ServerName ____________
WSGIDaemonProcess aurapi user=avt group=avt threads=5 python-path=/usr/bin/anaconda/lib/python2.7/site-packages python-home=/usr/bin/anaconda/bin
WSGIScriptAlias / /var/api/aurapi/aurapi.wsgi
<Directory /var/api/aurapi>
WSGIProcessGroup aurapi
WSGIApplicationGroup %{GLOBAL}
WSGIScriptReloading On
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
这只发生在gdal上,其他所有库都运行良好。
提前感谢!
答案 0 :(得分:1)
原因是您正在使用Anaconda Python并且还在Apache中启用了mod_ssl模块。
这会导致问题,因为Anaconda Python会忽略系统OpenSSL库并捆绑自己的库。加载到Apache时的mod_ssl模块将使用系统OpenSSL库,因此它们首先被加载。当Python中的任何东西试图使用Anaconda Python中的SSL模块时,OS会看到系统OpenSSL库已经加载(通过mod_ssl),因此Anaconda OpenSSL库不会被使用。因为Anaconda Python中的OpenSSL库是一个不同的版本或者在某些其他方面不兼容,所以会出现各种奇怪的问题,因为任何Python模块都会编译,期望Anaconda版本的OpenSSL库。
简而言之,Anaconda Python捆绑OpenSSL,MacOS X上捆绑了PSF,这意味着当使用mod_wsgi中的任何一个时,你不能将mod_ssl与Apache一起使用,否则你会遇到问题。