碰到一个遗留的老项目,基于Python 3.7开发,需要增加些功能,尝试debug的时候, VS Code提示需要Python 3.8 以上版本,问是否要切换, 放弃切换,继续使用的时候报错,
File "/Users/m2max/.vscode/extensions/ms-python.debugpy-2024.13.2024103001-darwin-arm64/bundled/libs/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_plugin_utils.py", line 4, in <module>
from typing import Tuple, Literal
ImportError: cannot import name 'Literal' from 'typing' (/Users/m2max/.pyenv/versions/3.7.17/lib/python3.7/typing.py)
官网给出的关于插件不同版本对Python版本支持情况
| Python version | Latest supported Python Debugger extension version | debugpy version |
| 2.7, >= 3.5 | 2023.1.XXX | 1.5.1 |
| >= 3.7 | 2024.0.XXX | 1.7.0 |
| >= 3.8 | 2024.2.XXX | 1.8.1 |
我的插件版本

从上面的信息看,我似乎该降低插件版本,并按官方的提醒来禁止自动更新,
注意:一旦你在 VS Code 中安装了较旧版本的 Python 调试器扩展,你可能需要通过在 settings.json 文件中更改 "extensions.autoUpdate" 设置的值来禁用自动更新。
网上给的方案,多是降低debugpy的版本, 今天尝试一个不一样的方案。
回到前面的报错,网上搜索了下,
错误原因,Literal
是在Python 3.8 版本中引入的新功能,因此无法在 Python 3.7 中直接使用。
解决办法:通过安装typing_extensions
模块来解决这个问题。这个模块提供了一些在Python标准库typing
模块中未提供的新类型和工具。
解决方案
尝试修改 debugpy 的代码, 根据报错,很容易定位到pydevd_plugin_utils.py
。
原来的代码是

修改为

import sys
if sys.version_info[:2] >= (3, 8):
from typing import Literal
else:
from typing_extensions import Literal
如果没有安装typing_extensions
, 记得安装它。
pip install typing_extensions
问题解决了

至于是否有别的错误,目前不得而知,等碰到了再说吧。
文章转载自alitrack,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




