Python 3.8.5环境下Heroku部署Streamlit应用报No module named报错
Heroku部署Streamlit模块缺失报错解决方案
- 核查
requirements.txt存放路径:必须放置在项目根目录,与Procfile、主程序文件site.py同级,不得存放于任意子文件夹下。Heroku的Python build流程仅读取根目录下的依赖声明文件,子目录内的同名文件不会被识别。 - 核查依赖声明文件优先级:确认项目根目录无
Pipfile、pyproject.toml、poetry.lock等其他依赖声明文件。Heroku的Python build流程会优先识别Pipenv、Poetry等工具的配置文件,自动忽略requirements.txt,若存在这类文件,要么删除,要么在对应配置中补充全部所需依赖。 - 核查
requirements.txt的内容与提交状态:- 确认文件未被
.gitignore规则匹配,本地修改完成后已完整推送到代码仓库,可直接在仓库文件列表中查看该文件的完整内容 - 确认文件内所有依赖条目无前缀多余空格、无格式错误,完全遵循
包名==版本号的单行书写规范,无断裂换行
- 确认文件未被
- 显式指定Python运行版本:在项目根目录新增
runtime.txt文件,写入内容python-3.8.5,与本地开发版本完全对齐。未显式指定版本时,Heroku会自动使用当前平台默认的Python版本,版本不兼容时会出现依赖安装异常、模块无法被加载的问题。 - 核查build流程日志:打开Heroku项目的构建日志,确认日志中存在
Installing streamlit==0.74.1的对应安装记录,无依赖安装报错。若存在安装失败提示,调整对应依赖的版本兼容性后重新触发部署。 - 调整Procfile启动命令:避免使用简写的
streamlit run命令,显式指定可执行文件路径,消除路径识别偏差。修改后Procfile内容为:
若web: sh setup.sh && ~/.local/bin/streamlit run site.pysetup.sh存在配置写入异常,可直接将Streamlit的运行参数合并到启动命令中,省略单独的shell脚本配置:web: ~/.local/bin/streamlit run site.py --server.port=$PORT --server.headless=true --server.enableCORS=false - 最小依赖集验证:先将
requirements.txt调整为仅包含核心依赖的最小可运行版本,排除依赖冲突影响:
确认最小依赖集可以正常部署运行后,再逐个添加其他依赖,定位具体的冲突项。streamlit==0.74.1 pandas==1.1.5 numpy==1.19.5
内容的提问来源于stack exchange,提问作者Shaqni
相关产品推荐
相关产品推荐

