VS Code运行Scrapy爬虫出现ModuleNotFoundError: No module named 'myitems'求助
问题根因
你在VSCode配置的python.analysis.extraPaths只作用于编辑器的静态代码分析阶段,不会影响Python运行时的模块搜索路径,所以设计阶段自动补全正常,但运行Scrapy命令时找不到模块。你用相对导入from .myitems import xxx报错是因为myitems.py存放在项目根目录,不是spiders子目录下,相对导入会从当前文件(keizer.py在spiders目录)所在位置查找,自然找不到。
解决方案
- 调整导入语句:先改回原来的导入写法:
from myitems import CarItem - 确认必要文件存在:在
C:\scrapy\hw_spiders目录下新增空的__init__.py文件,Python需要这个文件才会将目录识别为可导入的包。 - 固定运行路径:执行Scrapy命令时必须在
scrapy.cfg所在的目录(也就是C:\scrapy\hw_spiders)下运行,Scrapy会自动将当前目录加入模块搜索路径。
如果执行后还是报错,可以在keizer.py的所有导入语句最前面加以下代码,手动将项目根目录加入运行时搜索路径:
import sys import os sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
VSCode报错修复
如果修改后Pylance仍然报导入错误,将.vscode/settings.json的配置改为绝对路径写法适配不同打开场景:
{ "python.analysis.extraPaths": [ "${workspaceFolder}/hw_spiders" ] }
如果你当前VSCode打开的根目录就是C:\scrapy\hw_spiders,直接把值改成"./"即可。
项目结构优化建议
标准Scrapy项目约定使用items.py作为Item定义文件,你自定义为myitems.py本身功能不受影响,但建议遵守官方约定,降低后续维护成本。另外不要将Item定义文件放在spiders子目录下,统一放在项目根包目录即可。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

