我在这上面什么都找不到。我搞错了:
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
我很确定这行--它得到的错误是:
self.cipher = AES.new(key,AES.MODE_ECB)
这个剧本不久前还在用。PyCrypto是否更新了它的格式或其他什么?有谁知道怎么解决这个问题吗?如果需要,我可以提供更多的代码。
发布于 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
发布于 2022-05-17 09:39:38
您可以使用隐穹顶 python包而不是pycrypto。Pycryptodome似乎已经取代了当前未维护的pycrypto包,并与python 3.10相关的更改一样工作。
发布于 2022-09-14 08:40:26
卸载pycryto并安装pycryptodome
pip uninstall pycrypto
pip install pycryptodome
https://stackoverflow.com/questions/70705404
复制相似问题