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

部署Heroku时pycrypto编译失败问题求助

Heroku部署Python项目时pycrypto编译失败问题解决

问题描述

部署项目到Heroku时触发以下报错:

ERROR: Could not build wheels for pycrypto, which is required to install pyproject.toml-based projects

项目未直接依赖pycrypto,requirements.txt内容如下:

  • python==3.10.9
  • firebase_admin
  • pyrebase
  • pyrebase4
  • dash
  • dash_auth
  • dash_bootstrap_components
  • dash_daq
  • pandas
  • plotly

Heroku CLI关键报错片段:

src/_fastmath.c:33:10: fatal error: longintrepr.h: No such file or directory
   33 | #include <longintrepr.h>                                /* for conversions */
      |          ^~~~~~~~~~~~~~~
compilation terminated.
error: command '/usr/bin/gcc' failed with exit code 1

原因分析

  1. 间接依赖引入pycrypto:项目未直接声明,但pyrebase或pyrebase4等依赖的子依赖链中包含了pycrypto。
  2. pycrypto废弃不兼容高版本Python:pycrypto是停止维护的老旧加密库,其代码依赖的longintrepr.h头文件在Python 3.10+版本中已被移除,导致编译失败。
  3. Heroku环境Python版本不符:虽然requirements.txt指定Python 3.10.9,但Heroku构建时实际使用了Python 3.11(从报错路径/app/.heroku/python/include/python3.11可验证),版本差异加剧了兼容性问题。

可行解决方案

方案1:替换pycrypto为维护中替代库

在requirements.txt中强制添加pycryptodome(pycrypto的官方兼容替代库),覆盖间接依赖的pycrypto:

python==3.10.9
firebase_admin
pyrebase
pyrebase4
dash
dash_auth
dash_bootstrap_components
dash_daq
pandas
plotly
pycryptodome>=3.18.0

pip会自动用pycryptodome替换pycrypto的依赖,二者API完全兼容。

方案2:锁定Python版本确保环境一致

在项目根目录创建runtime.txt文件,明确指定Python版本:

python-3.10.9

强制Heroku使用指定版本,避免自动升级导致的环境差异。

方案3:清理重复依赖

同时安装pyrebase和pyrebase4可能导致依赖冲突,尝试只保留其中一个,简化依赖链,可能避免引入pycrypto。

方案4:临时跳过编译(不推荐长期使用)

在项目根目录创建pip.conf文件,添加以下内容跳过pycrypto的二进制编译:

[global]
no-binary = pycrypto

此方法仅作为临时 workaround,长期建议使用方案1替换依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:02:44