Heroku 上的全新部署失败并显示“使用 --allow-unverified PIL to allow”

Posted

技术标签:

【中文标题】Heroku 上的全新部署失败并显示“使用 --allow-unverified PIL to allow”【英文标题】:Fresh deploy on Heroku fails with "use --allow-unverified PIL to allow" 【发布时间】:2014-03-24 09:09:16 【问题描述】:

尝试将 Django 项目部署到 Heroku 上的新应用程序(过去两年代码在其他实例上运行) - 并受到以下打击:

   Downloading/unpacking PIL==1.1.7 (from -r requirements.txt (line 7))

   Could not find any downloads that satisfy the requirement PIL==1.1.7 (from -r requirements.txt (line 7))

   Some insecure and unverifiable files were ignored (use --allow-unverified PIL to allow).
   Cleaning up...

   No distributions at all found for PIL==1.1.7 (from -r requirements.txt (line 7))
   Storing debug log for failure in /app/.pip/pip.log

   !     Push rejected, failed to compile Python app

我知道pip 的最新变化,并希望使用安全的包,但在所有可用的包都按照 pip 的期望正确打包之前,我们需要一些解决方法。尤其是缺少 --allow-all-unverified 标志,这使得这是一个通过黑盒练习而不是无痛部署的反复试验。

有没有一种健全的方法可以克服这个障碍? (不仅仅是 PIL,这是第一个失败的包,如果我设法解决这个问题,还有其他几个像 pyPdf 这样的包会失败)

任何指针表示赞赏!

【问题讨论】:

【参考方案1】:

我询问了 pip 的维护者,他回答了一个简单的解决方案。我正在详细说明如何去做,以回答我自己的问题。这是您现在需要做的事情 - 直到软件包在内部托管并经过验证。

在本地机器上,创建一个新的虚拟环境并在requirements.txt文件顶部添加一行:

--allow-all-external

保存并运行:

pip install -r requirements.txt --download="~/temp/packages"

这将做的只是从requirements.txt 获取每个包名称并将包下载到~/temp/packages 目录并验证它。

对于每个验证失败的包,在requirements.txt 中添加另一行,就在允许所有外部包的第一行下方,如下所示:

--allow-unverified package-name

您可能需要 ping 维护者来解决此问题;)

继续直到 pip 成功完成,然后将更新的requirements.txt 提交到 vcs 并部署。

应该就是这样了。

【讨论】:

是我自己还是那是一个耗时且痛苦的过程?如果您查看其他工具,例如 npm 或 bundler,它们不会对未经验证的事情感到厌烦……反正只是在咆哮…… 对于像我这样的其他人:确保您使用的是最新版本的 pip 太...。否则您可能会尝试此操作并失败。当我这样做时,我特别被告知它找不到某些版本规范。升级 pip 本身让我过去了。

以上是关于Heroku 上的全新部署失败并显示“使用 --allow-unverified PIL to allow”的主要内容,如果未能解决你的问题,请参考以下文章

强制Heroku重新编译所有资产

在 Heroku 部署中构建失败

由于 sqlite3 gem 错误,Heroku 部署失败

在 Heroku 上清理 git repo

Heroku Node.js Discord.js 机器人部署失败

部署在heroku上的应用程序崩溃的可能原因是啥?