You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django集成Scrapy项目配置SCRAPY_SETTINGS_MODULE遇模块找不到错误

解决Scrapy在Django项目中找不到settings模块的问题

我来帮你搞定这个问题!你遇到的ModuleNotFoundError: No module named crawling,核心原因是外层的scraper/crawling目录缺少__init__.py文件,导致Python无法将它识别为一个可导入的模块,进而让Scrapy在解析scraper.crawling.crawling.settings路径时出错。

步骤1:修复模块结构

首先,在你的scraper/crawling目录(也就是包含子目录crawling的那个外层目录)中添加一个空的__init__.py文件。现在你的文件夹结构应该变成这样:

├───django-scraper
|   ├───django_scraper
|   |   ├───settings.py
|   │   └───__init__.py
|   ├───scraper
|   │   ├───crawling
|   │   │   ├───__init__.py  # 新增这个空文件
|   │   │   └───crawling
|   │   │       ├───spiders
|   │   │       │   └───__init__.py
|   │   │       ├───settings.py
|   │   │       └───__init__.py
|   │   ├───migrations
|   │   │   └───__init__.py
|   │   ├───templates
|   │   │   └───scraper
|   │   └───__init__.py

Python要求每个作为模块导入的目录都必须包含__init__.py(哪怕是空文件),这样外层的scraper.crawling才能被正确识别为模块,后续的crawling.settings路径也能正常解析。

步骤2:验证环境变量与导入逻辑

你当前设置的环境变量是正确的:

os.environ['SCRAPY_SETTINGS_MODULE'] = 'scraper.crawling.crawling.settings'

确保这段代码在调用get_project_settings()之前执行(比如在Django启动的早期阶段加载)。另外,你提到sys.path已经包含项目根目录C:\Users\georg\Django\django-scraper,这一点没问题,因为scraper目录就在这个根目录下,Python能正常定位到它。

可选:快速调试验证

可以在项目根目录下启动Python交互环境,手动测试导入是否成功:

import sys
sys.path.append('C:\\Users\\georg\\Django\\django-scraper')
from scraper.crawling.crawling import settings
print(settings)  # 如果能正常打印模块对象,说明路径没问题

如果导入成功,再调用get_project_settings()就不会报错了。

替代方案(不推荐)

如果不想修改目录结构,你也可以把scraper/crawling目录添加到sys.path中,然后修改环境变量:

import sys
import os

# 添加外层crawling目录到sys.path
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'scraper', 'crawling'))
os.environ['SCRAPY_SETTINGS_MODULE'] = 'crawling.settings'

但这种方法会破坏Python的模块导入规范,长期来看不如第一种方案稳妥。

内容的提问来源于stack exchange,提问作者George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 19:32:54