修改代码后Discord机器人本地正常但Heroku部署报datetime未定义错误
问题根因
报错发生在discord.py依赖自身的导入阶段,并非你的业务代码逻辑问题,触发的核心原因如下:
datetime是Python官方内置的标准库,无需额外通过pip安装。你在requirements.txt中添加的datetime条目会触发Heroku安装PyPI上早已废弃的第三方同名包,该包会覆盖系统标准库的datetime模块,导致discord.py在导入datetime时出错- 本地运行正常是因为你的本地环境没有安装这个废弃的第三方datetime包,默认使用标准库模块,所以不会触发冲突
解决步骤
- 第一步:修改requirements.txt,删除
datetime、asyncio两个条目,二者均为Python标准库,无需额外声明安装。修改后的requirements.txt参考如下:
git+https://github.com/Rapptz/discord.py
如果想要更稳定的运行效果,可以固定使用discord.py的正式发布版本,避免开发分支的潜在问题:
discord.py==2.3.2
- 第二步:排查项目根目录下是否存在
datetime.py、discord.py这类和标准库、依赖同名的文件,如果有,重命名为其他名称,避免导入时被优先加载覆盖官方模块 - 第三步:清理Heroku的构建缓存后重新部署。如果安装了Heroku CLI,可以执行以下命令清理缓存:
heroku builds:cache:purge -a 替换为你的Heroku应用名称
没有安装CLI的话,可以直接在Heroku控制台的应用设置页面,找到Buildpacks区域,点击「Clear build cache」按钮完成缓存清理,之后重新推送代码部署即可
- 第四步:查看部署后的运行日志,确认discord导入阶段无报错即可正常运行
内容的提问来源于stack exchange,提问作者chrisiwnl
相关产品推荐
相关产品推荐

