Python 3.9.8 使用 Black 并导入 `typed_ast.ast3` 失败

zer*_*ewl 27 python python-3.x

自从更新到 Python\xc2\xa03.9.8 以来,我们在CI管道中使用Black时遇到错误。

\n
black....................................................................Failed\n- hook id: black\n- exit code: 1\nTraceback (most recent call last):\n  File "../.cache/pre-commit/repol9drvp84/py_env-python3/bin/black", line 5, in <module>\n    from black import patched_main\n  File "../.cache/pre-commit/repol9drvp84/py_env-python3/lib/python3.9/site-packages/black/__init__.py", line 52, in <module>\n    from typed_ast import ast3, ast27\n  File "../.cache/pre-commit/repol9drvp84/py_env-python3/lib/python3.9/site-packages/typed_ast/ast3.py", line 40, in <module>\n    from typed_ast import _ast3\nImportError: ../.cache/pre-commit/repol9drvp84/py_env-python3/lib/python3.9/site-packages/typed_ast/_ast3.cpython-39-x86_64-linux-gnu.so: undefined symbol: _PyUnicode_DecodeUnicodeEscape\n
Run Code Online (Sandbox Code Playgroud)\n

该错误可以通过以下方式轻松重现:

\n
% pip install typed_ast\n% python3 -c \'from typed_ast import ast3\'\nTraceback (most recent call last):\n  File "<string>", line 1, in <module>\nImportError:\n/usr/lib/python3/dist-packages/typed_ast/_ast3.cpython-39-x86_64-linux-gnu.so:\nundefined symbol: _PyUnicode_DecodeUnicodeEscape\n
Run Code Online (Sandbox Code Playgroud)\n

目前唯一的解决方法是降级到 Python 3.9.7。

\n

是否有其他修复可用?

\n

另请参见Bug#998854:未定义符号:_PyUnicode_DecodeUnicodeEscape

\n

zer*_*ewl 36

最初的错误是Python Black管道失败。Black 失败了,因为它被固定到旧版本,现在 Python\xc2\xa03.9.8 失败。

\n

将 Black 更新到最新版本21.10b0为我修复了错误。

\n

另请参阅typed_ast 问题 #169

\n
\n

对于可能在搜索中找到此内容的其他人,我通过\nblack 遇到了此问题,因为我将 black 固定到了旧版本。当前版本的 black 似乎不再使用 typed-ast,因此不会遇到此问题。

\n
\n

使用最新typed-ast版本 >=1.5.0似乎也可以。

\n

例如,pip install typed-ast --upgrade

\n