gdal不使用flask(在apache + mod_wsgi上)

时间:2017-07-13 05:44:08

标签: flask mod-wsgi gdal

我在运行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上,其他所有库都运行良好。

提前感谢!

1 个答案:

答案 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一起使用,否则你会遇到问题。