Apify Scrapy模板触发AttributeError,本地及部署均报错求解决
解决AttributeError: 'AsyncioSelectorReactor' object has no attribute '_handleSignals'问题
原因分析
这个错误源于Python 3.11与Twisted库的版本兼容性冲突——Python 3.11调整了信号处理逻辑,而旧版本Twisted未适配AsyncioSelectorReactor的_handleSignals属性,M1芯片环境的依赖安装逻辑可能放大了这个问题。
具体解决步骤
1. 锁定兼容的Twisted版本
在项目根目录的requirements.txt文件中,明确指定Twisted的兼容版本:
Twisted>=22.10.0
若使用pyproject.toml管理依赖,添加以下配置:
[project.dependencies] Twisted = ">=22.10.0"
2. 本地验证依赖有效性
在M1 Mac终端执行以下命令,更新依赖并测试爬虫本地运行:
pip install --upgrade twisted>=22.10.0 scrapy crawl <你的爬虫名称>
确认本地无报错后,再重新部署到Apify平台。
3. 强制Apify平台使用指定依赖
若部署后平台仍加载旧版本依赖,可修改项目的Dockerfile,添加明确的依赖安装指令:
RUN pip install --upgrade pip && pip install twisted>=22.10.0 && pip install -r requirements.txt
同时在Apify控制台的任务设置中,确保构建流程优先读取项目根目录的依赖配置文件。
4. 降级Python版本(备选方案)
如果上述方法无效,可临时将项目Python版本降级到3.10,该版本与旧版Twisted兼容性更好:
- 修改项目
runtime.txt文件:
python-3.10
- 或在Apify控制台创建任务时,直接选择Python 3.10运行环境。
内容的提问来源于stack exchange,提问作者Ulvi
相关产品推荐
相关产品推荐

