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 文件。