运行 python3-fail2ban 时出错,显示“必须为‘#’格式定义 PY_SSIZE_T_CLEAN 宏”

运行 python3-fail2ban 时出错,显示“必须为‘#’格式定义 PY_SSIZE_T_CLEAN 宏”

我正在尝试运行 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.Readerpython-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 包,例如使用pippip3),如:

pip3 install --upgrade systemd-python
#or
fail2ban-python -m pip install --upgrade systemd-python

或者联系你的 Python 安装或操作系统分发维护者。

相关内容