首页 > 解决方案 > 使用 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 中收到此错误?

标签: python-3.xheroku

解决方案


直接的问题是picklePython 标准库中的一个模块。无需安装它(因此无需将其包含在您的requirements.txt文件中)。

通常,从与生产中使用的相同依赖文件在本地安装依赖项是一个好主意。这将发现这样的问题,您有一个不应该存在的条目。

但是,即使您可以构建它,您也可能不应该在 Heroku 上运行此代码。Heroku 的文件系统是短暂的。下次您的测功机重新启动时,您保存的文件将丢失。这种情况经常发生(至少每天一次)

您可以将数据保存在客户端服务器数据库中,例如Heroku 的 Postgres 服务,或者如果您确实需要保存Heroku 推荐的文件,请使用 Amazon S3 之类的工具。


推荐阅读