我正在尝试运行 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 宏?我很感激任何解决此问题的见解或建议。
提前致谢!
答案1
仅供记录 - 正如已经回答的那样 https://github.com/fail2ban/fail2ban/issues/3553#issuecomment-1673492045
由于使用了 systemd 后端(需要journal.Reader
python-systemd 模块),我相信它是https://github.com/systemd/python-systemd/issues/107(似乎已经修复,修复版本已发布皮皮,但可能没有到达你的发行版/python 安装)。要检查它是否真的是上述问题,请尝试以下操作...这是 Debian 12 上 3.11 的(成功)输出:
$ fail2ban-python --version
Python 3.11.2
$ fail2ban-python -c 'from systemd import journal; print("v:", journal.__version__); j = journal.Reader(); j.add_match(_SYSTEMD_UNIT="sshd"); print("OK")'
v: 235
OK
如果看到错误,请尝试升级 systemd-python 包,例如使用pip
(pip3
),如:
pip3 install --upgrade systemd-python
#or
fail2ban-python -m pip install --upgrade systemd-python
或者联系你的 Python 安装或操作系统分发维护者。