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,否则会遇到问题。
我在运行 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,否则会遇到问题。