python-3.x - 使用 requirements.txt 和 Heroku 时找不到匹配的 pickle 分布
问题描述
我正在使用 Heroku 尝试部署我的应用程序。连接到我的 Github 存储库后,然后在“手动部署”下,点击“部署分支”
Github 存储库包含requirements.txt
其中包含
numpy
pandas
matplotlib
pickle
gunicorn
flask
Heroku上的错误说
Collecting pickle (from -r /tmp/build_0f73c7cf93d0cf7e0d53415c51d2e21f/requirements.txt (line 4))
Could not find a version that satisfies the requirement pickle (from -r /tmp/build_0f73c7cf93d0cf7e0d53415c51d2e21f/requirements.txt (line 4)) (from versions: )
No matching distribution found for pickle (from -r /tmp/build_0f73c7cf93d0cf7e0d53415c51d2e21f/requirements.txt (line 4))
! Push rejected, failed to compile Python app.
! Push failed
然而,pickle
似乎安装在我的 Ubuntu 机器上。当我python
在终端上键入,然后import pickle
,我没有看到任何错误
另外,当我尝试
filename = 'outfile.pickle'
outfile = open(filename,'wb')
pickle.dump(dataframe,outfile)
outfile.close()
我在我的目录中看到了泡菜文件
为什么我在 Heroku 中收到此错误?
解决方案
直接的问题是pickle
Python 标准库中的一个模块。无需安装它(因此无需将其包含在您的requirements.txt
文件中)。
通常,从与生产中使用的相同依赖文件在本地安装依赖项是一个好主意。这将发现这样的问题,您有一个不应该存在的条目。
但是,即使您可以构建它,您也可能不应该在 Heroku 上运行此代码。Heroku 的文件系统是短暂的。下次您的测功机重新启动时,您保存的文件将丢失。这种情况经常发生(至少每天一次)。
您可以将数据保存在客户端服务器数据库中,例如Heroku 的 Postgres 服务,或者如果您确实需要保存Heroku 推荐的文件,请使用 Amazon S3 之类的工具。
推荐阅读
- sql - 原始查询中的 Laravel 选择计数
- vba - VBA:无法计数,然后打印编号。行数 - 错误 1004
- netsuite - NetsSuite 并行审批工作流
- azure - 如何仅将选定的 NuGet 包从 Azure Pipeline 发布到 Artifactory?
- python - 如何使用tight_layout 保持轴纵横比
- visual-studio - Visual Studio 2019 - 检测扩展的工具窗口何时关闭
- haskell - How can Haskell integer literals be comparable without being in the Eq class?
- makefile - 将变量从一个 makefile 传递到另一个
- sql-server - 从 Excel 在 SQL Server 数据库中运行 SQL 脚本(在 Excel 中预先生成)
- javascript - JavaScript 按钮无法在移动设备上正确调整大小