Heroku部署Discord Bot遇Python十六进制字面量无效语法错误
问题分析与解决方案
问题根源
这个错误和youtube_dl间接相关,但本质是旧版本的Crypto类库(pycrypto或旧版pycryptodome)与Python3语法不兼容。Python3已经移除了整数末尾的L后缀(用来表示长整数),而你用到的旧版Crypto库代码里还保留了0xffffffffL这种写法,导致触发SyntaxError。youtube_dl的依赖链里可能引入了这个旧版库。
解决步骤
- 替换/升级Crypto库:在你的
requirements.txt里直接指定使用pycryptodome>=3.10.1(pycryptodome是pycrypto的官方替代,已修复Python3语法问题)。如果之前依赖里写了pycrypto,直接删掉换成这个。 - 替换youtube_dl为yt-dlp:youtube_dl已经停止维护,很多依赖问题没更新。改用yt-dlp(它是youtube_dl的活跃分支),在
requirements.txt里写yt-dlp,代码里把导入youtube_dl改成import yt_dlp as youtube_dl即可,用法基本一致,还能避免很多兼容性坑。 - 清理Heroku缓存:旧依赖可能被缓存,执行命令
heroku repo:purge_cache -a 你的应用名称,然后重新部署,确保新的依赖包被安装。 - 固定Python版本:在项目根目录创建
runtime.txt,写入比如python-3.9.16,避免Heroku自动使用过新或过旧的Python版本,保证依赖兼容。
内容的提问来源于stack exchange,提问作者Rockzy 77
相关产品推荐
相关产品推荐

