在 PythonAnywhere 部署 Watchlist,使用 Pipenv 安装依赖时提示 Flask-Login 包的 hash 不匹配

当我在Pythonanywhere中的bash界面输入代码pipenv install时出现

01:16 ~/watchlist (master)$ pipenv install
Error, do this: mount -t proc proc /proc
Error, do this: mount -t proc proc /proc
Installing dependencies from Pipfile.lock (4fada3)…
An error occurred while installing flask-login==0.4.1 --hash=sha256:c815c1ac7b3e35e2081685e389a665f2c74d7e077cb93cecabaea352da4752ec! Will try again.
:snake: ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 10/10 — 00:00:08
Installing initially failed dependencies…
[pipenv.exceptions.InstallError]: File “/home/lightpeng/.local/lib/python3.7/site-packages/pipenv/core.py”, line 1874, in do_install
[pipenv.exceptions.InstallError]: keep_outdated=keep_outdated
[pipenv.exceptions.InstallError]: File “/home/lightpeng/.local/lib/python3.7/site-packages/pipenv/core.py”, line 1253, in do_init
[pipenv.exceptions.InstallError]: pypi_mirror=pypi_mirror,
[pipenv.exceptions.InstallError]: File “/home/lightpeng/.local/lib/python3.7/site-packages/pipenv/core.py”, line 859, in do_install_dependencies
[pipenv.exceptions.InstallError]: retry_list, procs, failed_deps_queue, requirements_dir, **install_kwargs
[pipenv.exceptions.InstallError]: File “/home/lightpeng/.local/lib/python3.7/site-packages/pipenv/core.py”, line 763, in batch_install
[pipenv.exceptions.InstallError]: _cleanup_procs(procs, not blocking, failed_deps_queue, retry=retry)
[pipenv.exceptions.InstallError]: File “/home/lightpeng/.local/lib/python3.7/site-packages/pipenv/core.py”, line 681, in _cleanup_procs
[pipenv.exceptions.InstallError]: raise exceptions.InstallError(c.dep.name, extra=err_lines)
[pipenv.exceptions.InstallError]: [‘Looking in links: /usr/share/pip-wheels’, ‘Collecting flask-login==0.4.1 (from -r /tmp/pipenv-so82xo3f-requirements/pipenv-cpw1jn7s-requirement.txt (line 1))’]
[pipenv.exceptions.InstallError]: [‘THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.’, ’ flask-login==0.4.1 from file:///usr/share/pip-wheels/Flask_Login-0.4.1-py2.py3-none-any.whl (from -r /tmp/pipenv-so82xo3f-requirements/pipenv-cpw1jn7s-requirement.txt (line 1)):’, ’ Expected sha256 c815c1ac7b3e35e2081685e389a665f2c74d7e077cb93cecabaea352da4752ec’, ’ Got f1f863a824912c6b4d9863c27070cd76b202e11588bc74b553761f96174841ce’]
ERROR: ERROR: Package installation failed…

你的项目源码是直接克隆了示例程序,还是自己写的?(没遇到过这个错误)

你好,我遇到了和你相同的问题,请问你解决了吗?

我也遇到了一样的问题,代码是跟着写的。 开发服务器上没问题,测试也都通过了。 请问怎么解决呢?

需要更详细的信息。比如完整的错误信息,部署时选择的 Python 版本,Pipfile.lock 的内容等。如果项目放到了 GitHub 上,可以把链接放上来看看。

决定先不管了,买了你的书flask web开发实战,后续遇到问题我再来提问啦。不过当当的云读书读书体验真的好差还要89块。现在很后悔想买实体书了,想买书的朋友还是买实体书吧,书是真的不错! 希望以后可以出更好的书,我也一定会买。

1 个赞

能不能把《Flask Web 开发实战》 在官网上做成付费教程,然后在每个章节下加一个提问区,这样体验可以有:rofl:

建议不要使用 pipenv
直接用 virtualenv
不然卡得想炸电脑

我也遇到了同样的问题,Pythonanywhere部署不了。执行flask initdb,又显示no commod name “initdb”,试了好多遍都不行。题主现在部署好了吗?

我也是这个问题
image

纯代码或命令行文本建议使用代码块格式化。

插入代码块的方式:除了将所有代码缩进四格,更方便的插入代码块方式是使用三个连续的反引号作为开始和结束标记,比如:

```
def hello():
    return ‘Hello World’
```

会被渲染为:

 def hello():
     return 'Hello World'

具体参考论坛说明

我也是,你解决了吗

你的项目放到 GitHub 上了吗,可以把链接分享出来(或者打包发给我 withlihui@gmail.com)。

谢谢你

我在 PythonAnywhere 测试了你的项目,克隆仓库、安装依赖、激活虚拟环境,最后执行 flask initdb 命令并没有报错。建议检查你的步骤和书里是否有不同,重新试一次。

因为这个主题下混杂了几个不同的部署问题,变得很难处理。后续遇到类似问题的同学请新建主题,不要在这里追加提问。

我在pythonanywhere上删除所有之后,又重新走了一遍,还是有问题。我同事测试了你的项目也是这个问题。
我们安装完pipenv 后,查看版本就出现下面问题了:
03:11 ~/watchlist (master)$ pipenv --version
Error, do this: mount -t proc proc /proc
Error, do this: mount -t proc proc /proc
pipenv, version 2018.11.26

然后再创建虚拟环境,直接卡死了很久才跳出来:


我们猜测,是pipenv 与 pythonanywhere存在兼容或者啥问题。你那边测试没问题是因为你之前已经安装了pipenv。如果你的pipenv是新装的,估计也会出现这个问题。


下午更新
同事帮我找到问题所在了。 pipenv 创建虚拟环境的时候,需要调用 proc这个文件。但是当前环境下没有权限调用这个文件。因为我们安装pipenv的时候是用 --user 的权限,这个–user 权限有所限制。而pythonanywhere又不支持超级用户权限 --sudo。

找到一个我这个问题的解决办法:
1、手动生成 requirements.txt文件。
打开powershell, 进入项目根目录(即输入命令 cd d:\py\watchlist,我的项目都放在py文件夹 下),然后运行 pip freeze > requirements.txt

2、把requirements.txt 文件导入到pythonanywhere的文件夹里面。
进入 pythonanywhere里面的Files 界面,点击进入项目文件夹watchlist,然后点击image ,然后选中requirements.txt 文件上传。

3、再在虚拟环境下安装依赖pip install -r requirements.txt
之前虽然运行pipenv install 时报错,依赖没有安装成功,但是这步成功创建了虚拟环境。
我们继续运行 pipenv shell,虽然还是会报错,但是没关系,还是成功激活了虚拟环境。
于是我们继续运行 pip install -r requirements.txt,这时候就能成功安装了。

proc 那个错误提示可以忽略。你的问题和上面某一条回复相同,是安装 Flask-Login 时包的 hash 值对不上,目前来看是 PythonAnywhere 内部缓存了某一个版本的 Flask-Login 安装包文件。你可以在这条命令后手动执行一行下面的命令解决:

$ pipenv install flask-login --skip-lock

对了,你是怎么安装 Pipenv 的,使用的命令是什么?