我正在尝试运行 yocto 构建的 python3-fail2ban 组件,但遇到与PY_SSIZE_T_CLEAN 宏相关的错误。错误消息是PY_SSIZE_T_CLEAN macro must be defined for '#' formats
。
我研究了这个问题,发现在 Python 3.10 C-API 文档https://docs.python.org/3.10/c-api/arg.html#arg-parsing中,提到了,
for all # variants of formats (like s#, y#, etc.), the PY_SSIZE_T_CLEAN macro must be defined before including Python.h. Additionally, it's stated that in Python 3.9 and older, the type of the length argument is Py_ssize_t if the PY_SSIZE_T_CLEAN macro is defined, or int otherwise.
我尝试通过在包含 Python.h 之前定义 PY_SSIZE_T_CLEAN 宏来解决此问题。但问题并没有解决,补丁片段在这里,
+#ifndef PY_SSIZE_T_CLEAN
+#define PY_SSIZE_T_CLEAN 1
+#endif
#include "Python.h"也包含
CFLAGS += "PY_SSIZE_T_CLEAN "
在 python3-fail2ban 组件中。不影响观察后来尝试
CFLAGS += "PY_SSIZE_T_CLEAN "
直接添加python3组件,但是它在yocto python3中产生了很多构建问题,似乎不推荐
我将 Yocto 与特定版本的python3-fail2ban (0.11.2)和python3(10.12)一起使用,并且我已经验证在包含 Python.h 之前定义了必要的 PY_SSIZE_T_CLEAN 宏。
尽管如此,错误仍然存在。有没有人在运行 python3-fail2ban 时遇到类似的问题?是否需要执行任何其他步骤或配置才能正确包含 PY_SSIZE_T_CLEAN 宏?我很感激任何解决此问题的见解或建议。
提前致谢!
仅供记录 - 正如已在 https://github.com/fail2ban/fail2ban/issues/3553#issuecomment-1673492045回答的那样
由于使用了 systemd 后端(需要
journal.Reader
python-systemd 模块),我相信它是https://github.com/systemd/python-systemd/issues/107(似乎已经修复并且在pypi上发布了修复版本,但可能没有到达您的发行版/python 安装)。要检查是否确实是上述问题,请尝试此...这是 Debian 12 上 3.11 的(成功)输出:如果您看到错误,请尝试升级 systemd-python 软件包,例如使用
pip
(pip3
),例如:或者联系您的 Python 安装或操作系统发行版维护人员。