首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SystemError:必须为“#”格式定义PY_SSIZE_T_CLEAN宏

SystemError:必须为“#”格式定义PY_SSIZE_T_CLEAN宏
EN

Stack Overflow用户
提问于 2022-01-14 02:31:11
回答 4查看 9.1K关注 0票数 6

我在这上面什么都找不到。我搞错了:

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "/path/to/pwdb.py", line 265, in <module>
    password_db()
  File "/path/to/pwdb.py", line 73, in __init__
    self.cipher = AES.new(key,AES.MODE_ECB)
  File "/home/STACKOVERFLOW/.local/lib/python3.10/site-packages/Crypto/Cipher/AES.py", line 95, in new
    return AESCipher(key, *args, **kwargs)
  File "/home/STACKOVERFLOW/.local/lib/python3.10/site-packages/Crypto/Cipher/AES.py", line 59, in __init__
    blockalgo.BlockAlgo.__init__(self, _AES, key, *args, **kwargs)
  File "/home/STACKOVERFLOW/.local/lib/python3.10/site-packages/Crypto/Cipher/blockalgo.py", line 141, in __init__
    self._cipher = factory.new(key, *args, **kwargs)
SystemError: PY_SSIZE_T_CLEAN macro must be defined for '#' formats

我很确定这行--它得到的错误是:

代码语言:javascript
运行
复制
self.cipher = AES.new(key,AES.MODE_ECB)

这个剧本不久前还在用。PyCrypto是否更新了它的格式或其他什么?有谁知道怎么解决这个问题吗?如果需要,我可以提供更多的代码。

EN

回答 4

Stack Overflow用户

发布于 2022-02-07 14:05:19

听起来这个扩展没有为python 3.10更新。

在3.10上,在解析参数时使用#变量的任何模块在包含Python.h之前都需要有一个#define PY_SSIZE_T_CLEAN

从医生那里:

对于所有#格式变体(s#、y#等),必须在包含Python.h之前定义宏PY_SSIZE_T_CLEAN。在Python3.9及更高版本上,如果定义了Py_ssize_t宏,长度参数的类型为PY_SSIZE_T_CLEAN,否则为int。

请参阅https://docs.python.org/3/c-api/arg.html#strings-and-buffers

票数 4
EN

Stack Overflow用户

发布于 2022-05-17 09:39:38

您可以使用隐穹顶 python包而不是pycrypto。Pycryptodome似乎已经取代了当前未维护的pycrypto包,并与python 3.10相关的更改一样工作。

票数 3
EN

Stack Overflow用户

发布于 2022-09-14 08:40:26

卸载pycryto并安装pycryptodome

代码语言:javascript
运行
复制
pip uninstall pycrypto
pip install pycryptodome
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70705404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档