Docker化Python应用VSCode调试报错:Callable无_abc_registry属性
问题分析与解决方案
问题根源
从报错日志里的路径/.venv/lib/python3.8/site-packages/debugpy/adapter/../../typing.py能明确:你的项目根目录存在一个自定义的typing.py文件,Python导入模块时会优先加载项目内的同名文件,而非标准库的typing模块。这个自定义文件的实现不符合debugpy的预期,导致初始化Callable类时抛出AttributeError: type object 'Callable' has no attribute '_abc_registry',进而引发debugpy适配器连接超时,最终服务启动失败。
解决方案
1. 重命名冲突文件
找到项目根目录下的typing.py,将其重命名为不与Python标准库模块名冲突的名称,比如project_typing.py或custom_typing.py。
2. 同步修改代码中的导入引用
检查项目所有导入该自定义文件的代码,把导入语句从:
import typing
修改为:
import project_typing as typing # 替换成你重命名后的文件名
3. 清理缓存并重建依赖
- 删除虚拟环境里残留的冲突缓存文件:
rm -rf .venv/lib/python3.8/site-packages/typing.py* rm -rf .venv/lib/python3.8/site-packages/__pycache__/typing.* - 也可以直接重建虚拟环境,彻底清除残留的冲突文件。
4. 优化Docker启动配置(可选)
当前entrypoint每次启动容器都会重新安装debugpy,建议把debugpy加入项目requirements.txt,或者在Dockerfile里提前安装,提升启动效率:
修改Dockerfile:
# 基于现有镜像基础上添加 RUN pip install debugpy
修改docker-compose.yml的entrypoint:
entrypoint: [ "python", "-m", "debugpy", "--wait-for-client", "--listen", "0.0.0.0:5672", "-m", "entrypoint" ]
验证步骤
- 完成修改后重启容器:
docker-compose up --build - 观察容器日志,确认debugpy正常输出等待客户端连接的提示。
- 在VSCode中配置远程调试,目标端口设为5672,尝试连接并启动调试,验证功能正常。
内容的提问来源于stack exchange,提问作者Shikha Singh
相关产品推荐
相关产品推荐

