诗歌失败,并显示“检索到的包摘要不在诗歌中。锁定元数据”

Bas*_*sil 19 python python-poetry

我们正在尝试合并项目中的旧分支,当尝试构建 docker 映像时,诗歌似乎由于某种我不明白的原因而失败。

\n

我对诗歌不太熟悉,因为到目前为止我只使用requirements.txt作为依赖项,所以我对正在发生的事情有点摸索。

\n

我收到的错误(在服务器上构建图像的剧本的一部分)是这样的:

\n
       "Installing dependencies from lock file",\n        "",\n        "Package operations: 16 installs, 14 updates, 0 removals",\n        "",\n        "  \xe2\x80\xa2 Updating importlib-metadata (4.8.3 -> 2.0.0)",\n        "  \xe2\x80\xa2 Updating pyparsing (3.0.6 -> 2.4.7)",\n        "  \xe2\x80\xa2 Updating six (1.16.0 -> 1.15.0)",\n        "",\n        "  RuntimeError",\n        "",\n        "  Retrieved digest for link six-1.15.0.tar.gz(sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259) not in poetry.lock metadata ['30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259', '8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced']",\n        "",\n        "  at /usr/local/lib/python3.7/dist-packages/poetry/installation/chooser.py:115 in _get_links",\n        "      111\xe2\x94\x82 ",\n        "      112\xe2\x94\x82         if links and not selected_links:",\n        "      113\xe2\x94\x82             raise RuntimeError(",\n        "      114\xe2\x94\x82                 \\"Retrieved digest for link {}({}) not in poetry.lock metadata {}\\".format(",\n        "    \xe2\x86\x92 115\xe2\x94\x82                     link.filename, h, hashes",\n        "      116\xe2\x94\x82                 )",\n        "      117\xe2\x94\x82             )",\n        "      118\xe2\x94\x82 ",\n        "      119\xe2\x94\x82         return selected_links",\n        "",\n        "",\n        "  RuntimeError",\n        "",\n        "  Retrieved digest for link pyparsing-2.4.7.tar.gz(sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1) not in poetry.lock metadata ['c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1', 'ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b']",\n        "",\n        "  at /usr/local/lib/python3.7/dist-packages/poetry/installation/chooser.py:115 in _get_links",\n        "      111\xe2\x94\x82 ",\n        "      112\xe2\x94\x82         if links and not selected_links:",\n        "      113\xe2\x94\x82             raise RuntimeError(",\n        "      114\xe2\x94\x82                 \\"Retrieved digest for link {}({}) not in poetry.lock metadata {}\\".format(",\n        "    \xe2\x86\x92 115\xe2\x94\x82                     link.filename, h, hashes",\n        "      116\xe2\x94\x82                 )",\n        "      117\xe2\x94\x82             )",\n        "      118\xe2\x94\x82 ",\n        "      119\xe2\x94\x82         return selected_links",\n        "",\n        "",\n        "  RuntimeError",\n        "",\n        "  Retrieved digest for link importlib_metadata-2.0.0.tar.gz(sha256:77a540690e24b0305878c37ffd421785a6f7e53c8b5720d211b211de8d0e95da) not in poetry.lock metadata ['77a540690e24b0305878c37ffd421785a6f7e53c8b5720d211b211de8d0e95da', 'cefa1a2f919b866c5beb7c9f7b0ebb4061f30a8a9bf16d609b000e2dfaceb9c3']",\n        "",\n        "  at /usr/local/lib/python3.7/dist-packages/poetry/installation/chooser.py:115 in _get_links",\n        "      111\xe2\x94\x82 ",\n        "      112\xe2\x94\x82         if links and not selected_links:",\n        "      113\xe2\x94\x82             raise RuntimeError(",\n        "      114\xe2\x94\x82                 \\"Retrieved digest for link {}({}) not in poetry.lock metadata {}\\".format(",\n        "    \xe2\x86\x92 115\xe2\x94\x82                     link.filename, h, hashes",\n        "      116\xe2\x94\x82                 )",\n        "      117\xe2\x94\x82             )",\n        "      118\xe2\x94\x82 ",\n        "      119\xe2\x94\x82         return selected_links"\n    ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n

如果您注意到,对于所有 3 个包,检索到的摘要实际上位于诗歌锁定文件的元数据部分的摘要列表中。\n我们的猜测是,该锁定文件可能是由旧版本的诗歌生成的,并且不再是有效的。也许应该提到一种散列方法(例如检索到的摘要是 sha256,但在与之比较的摘要上没有指定任何方法)?\n另一个奇怪的事情是,poetry 没有安装在 dockerfile 内,但似乎达到了这一点尽管如此,我真的很好奇这是怎么发生的。

\n

任何见解将不胜感激(甚至任何包含更多信息的链接)!

\n

非常感谢您抽出时间!(如果这对您来说还不够,请随时询问更多信息!)

\n

干杯!

\n

Nee*_*kla 12

我正在使用诗歌 v1.2.2,修复方法是将配置更改为不使用新的实验安装程序,如下所示

poetry config experimental.new-installer false

进而

poetry install

从 TOML 文件重新创建新锁。

虽然我的问题并不完全相同,但它是完全相同的运行时错误,并且可能存在 md5-sha256 不匹配的情况。


Lla*_*maD 9

当我自己遇到这个问题时,它已通过使用较新版本的诗歌重新创建锁定文件来解决。如果您能够查看 .toml 文件,我建议删除此锁定文件,然后运行poetry install以创建新的锁定文件。

  • 这个解决方案对我不起作用。 (4认同)

wol*_*pan 8

就我而言,我使用pypi-server. md5它默认使用摘要方法。您可以通过CMD参数更改它。例如,我使用 docker 镜像,我的 Dockerfile 如下:

FROM pypiserver/pypiserver:latest
ENTRYPOINT ["/entrypoint.sh", "run", "--hash-algo", "sha256"]
Run Code Online (Sandbox Code Playgroud)

希望能帮助其他搜索这个问题的人。


小智 6

我在尝试将个人 package-xxx 替换为同一包的另一个源而不更改版本时遇到了同样的问题。sha256 则不同。

在诗歌 1.2.2 中,您可以用来poetry cache list检查包是否缓存在诗歌中。

如果是,请使用poetry cache package-xxx clear --all并尝试安装 package-xxxpoetry add package=xxx