AttributeError: /usr/sbin/httpd: undefined symbol: Error_GetLastErrorNum with Flask and mod_wsgi
AttributeError: /usr/sbin/httpd: undefined symbol: Error_GetLastErrorNum with Flask and mod_wsgi
我有一个使用 Flask 和 mod_wsgi 运行 python 代码的网站。我设置了 WSGIDaemonProcess 用户和组以及 WSGIProcessGroup。最近,在更新 geopandas 之后,当 wgsi 文件导入 python 应用程序时,我收到错误 AttributeError: /usr/sbin/httpd: undefined symbol: Error_GetLastErrorNum with Flask and mod_wsgi导入 geopandas。
httpd错误日志的全文是
文件“/opt/miniconda3/envs/py38/lib/python3.8/site-packages/geopandas/init.py”,第 1 行,在
从geopandas._config导入选项#noqa
文件“/opt/miniconda3/envs/py38/lib/python3.8/site-packages/geopandas/_config.py”,第 109 行,在
中
default_value=_default_use_pygeos(),
文件“/opt/miniconda3/envs/py38/lib/python3.8/site-packages/geopandas/_config.py”,第 95 行,在 _default_use_pygeos
中
导入 geopandas._compat 作为兼容
文件“/opt/miniconda3/envs/py38/lib/python3.8/site-packages/geopandas/_compat.py”,第 217 行,位于
导入 rtree # noqa
文件“/opt/miniconda3/envs/py38/lib/python3.8/site-packages/rtree/init.py”,第 9 行,在
from .index import Rtree, Index # noqa
文件“/opt/miniconda3/envs/py38/lib/python3.8/site-packages/rtree/index.py”,第 6 行,在
从 。导入核心
文件“/opt/miniconda3/envs/py38/lib/python3.8/site-packages/rtree/core.py”,第 77 行,在
rt.Error_GetLastErrorNum.restype = ctypes.c_int
文件“/usr/lib64/python3.8/ctypes/init.py”,第 386 行,在 getattr 中
func = self.getitem(名称)
文件“/usr/lib64/python3.8/ctypes/init.py”,第 391 行,在 getitem
func = self._FuncPtr((name_or_ordinal, self))
tributeError:/usr/sbin/httpd:未定义的符号:Error_GetLastErrorNum
请注意,我已经尝试 运行 单独的命令,例如 import geopandas,rt.Error_GetLastErrorNum.restype = ctypes.c_int 和其他命令,作为 conf 文件中指定的用户,作为 root,和阿帕奇。我无法重现错误。仅当我尝试打开 Selinux 设置为宽容的网站时才会出现。
问题是 mod_wsgi 是用 yum 安装的。这创建了它自己的 python 环境,mod_wsgi 默认为该环境,并试图从中加载 ctypes。 Geopandas、rtree 等正在从 miniconda 环境中加载。解决方案是
dnf remove mod_wsgi
dnf install httd-devel
然后从想要的python环境
pip install mod_wsgi
sudo mod_wsgi-express install-module
然后将输出插入所需的 httpd .conf 文件。
我有一个使用 Flask 和 mod_wsgi 运行 python 代码的网站。我设置了 WSGIDaemonProcess 用户和组以及 WSGIProcessGroup。最近,在更新 geopandas 之后,当 wgsi 文件导入 python 应用程序时,我收到错误 AttributeError: /usr/sbin/httpd: undefined symbol: Error_GetLastErrorNum with Flask and mod_wsgi导入 geopandas。
httpd错误日志的全文是
文件“/opt/miniconda3/envs/py38/lib/python3.8/site-packages/geopandas/init.py”,第 1 行,在
从geopandas._config导入选项#noqa 文件“/opt/miniconda3/envs/py38/lib/python3.8/site-packages/geopandas/_config.py”,第 109 行,在
中default_value=_default_use_pygeos(), 文件“/opt/miniconda3/envs/py38/lib/python3.8/site-packages/geopandas/_config.py”,第 95 行,在 _default_use_pygeos
中导入 geopandas._compat 作为兼容 文件“/opt/miniconda3/envs/py38/lib/python3.8/site-packages/geopandas/_compat.py”,第 217 行,位于 导入 rtree # noqa 文件“/opt/miniconda3/envs/py38/lib/python3.8/site-packages/rtree/init.py”,第 9 行,在
from .index import Rtree, Index # noqa 文件“/opt/miniconda3/envs/py38/lib/python3.8/site-packages/rtree/index.py”,第 6 行,在 从 。导入核心
文件“/opt/miniconda3/envs/py38/lib/python3.8/site-packages/rtree/core.py”,第 77 行,在 rt.Error_GetLastErrorNum.restype = ctypes.c_int
文件“/usr/lib64/python3.8/ctypes/init.py”,第 386 行,在 getattr 中 func = self.getitem(名称)
文件“/usr/lib64/python3.8/ctypes/init.py”,第 391 行,在 getitem func = self._FuncPtr((name_or_ordinal, self)) tributeError:/usr/sbin/httpd:未定义的符号:Error_GetLastErrorNum
请注意,我已经尝试 运行 单独的命令,例如 import geopandas,rt.Error_GetLastErrorNum.restype = ctypes.c_int 和其他命令,作为 conf 文件中指定的用户,作为 root,和阿帕奇。我无法重现错误。仅当我尝试打开 Selinux 设置为宽容的网站时才会出现。
问题是 mod_wsgi 是用 yum 安装的。这创建了它自己的 python 环境,mod_wsgi 默认为该环境,并试图从中加载 ctypes。 Geopandas、rtree 等正在从 miniconda 环境中加载。解决方案是
dnf remove mod_wsgi
dnf install httd-devel
然后从想要的python环境
pip install mod_wsgi
sudo mod_wsgi-express install-module
然后将输出插入所需的 httpd .conf 文件。