同步原社区更新:

https://github.com/psycopg/psycopg2/commit/5fb1305a1420ecb884e581d84ea520e490dd5fdf
https://github.com/psycopg/psycopg2/pull/1601/commits/959339cefb3a7aa59f9e0c7ccf0450eaff3ef4ba

修复三个问题:

  1. initmodule 时没有返回真实的错误信息,导致 debug 困难。issue 讨论详见 https://github.com/psycopg/psycopg2/issues/1598

修复前报错:SystemError: initialization of _psycopg raised unreported exception

修复后报错: SystemError: type psycopg2.extensions.ReplicationConnection has the Py_TPFLAGS_HAVE_GC flag but has no traverse function

  1. python 3.9及以上的版本中如果在类型的 tp_flags 字段设置了 Py_TPFLAGS_HAVE_GC ,则必须同时设置 tp_traverse 对应的函数。

如果一个类型添加了 Py_TPFLAGS_HAVE_GC,则它 必须 实现至少一个 tp_traverse 句柄或显式地使用来自其一个或多个子类的句柄。 官方文档

  1. python 3.11 中 Python.h 不再包含 stdlib.h 的头了,需在驱动中显示引用,原始 PR: https://github.com/psycopg/psycopg2/pull/1376

修复前导入时报错截图

输入图片说明

修复后在python 3.11 上导入截图