gdal 不与烧瓶一起工作(在 apache + mod_wsgi 上)

gdal not working with flask (on apache + mod_wsgi)

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

提前致谢!

原因是您正在使用 Anaconda Python 并且还在 Apache 中启用了 mod_ssl 模块。

这会导致问题,因为 Anaconda Python 会忽略系统 OpenSSL 库并捆绑其自己的库。 mod_ssl 模块加载到 Apache 时将使用系统 OpenSSL 库,因此它们首先加载。当 Python 中的任何内容尝试使用来自 Anaconda Python 的 SSL 模块时,OS 发现系统 OpenSSL 库已经加载(通过 mod_ssl),因此 Anaconda OpenSSL 库不习惯。因为 Anaconda Python 中的 OpenSSL 库是不同的版本或在其他方面不兼容,所以会出现各种奇怪的问题,因为任何 Python 模块将被编译为期望 OpenSSL 库的 Anaconda 版本。

简而言之,Anaconda Python 对 OpenSSL 的捆绑,以及 MacOS X 上 PSF 的 Python 3.6,意味着当使用其中任何一个时 mod_wsgi,不能在Apache中使用mod_ssl,否则会遇到问题。