python3.9如何找到兼容的Spacy版本

问题描述 投票:0回答:1

我需要重新部署现有的非常旧的 python GCP Cloud Function,该函数使用 Spacy 和其他 NLP 内容(我不熟悉) - 以使用较新的 python 运行时(3.9 或更高版本)。

避免疯狂的依赖版本冲突追逐和调整的细节...我需要将 spacy 版本从 < 2.39 to > 3.0.x 和 typer 升级到 > 1.4.0 ... 我这样做遇到的最后一个问题是:

The conflict is caused by:
The user requested typer==0.4.1
spacy 3.0.9 depends on typer<0.4.0 and >=0.3.0

看起来我不能使用 spacy=3.0.9 和 typer=0.4.1 的组合。 我不能低于 typer 0.4.1(多轮版本调整否则都会失败......)

现在我需要找到一个可以与 typer=0.4.1 配合使用的 spacy 版本...... 我搜索了又搜索 - 找不到一种方法来弄清楚哪些版本的 spacy 会兼容....我尝试进行强力猜测 - 尝试了 3.0.9 以上的所有版本的 spacy - 以及第一次尝试安装 spacy>=4.0.0 会导致此问题:

ERROR: Could not find a version that satisfies the requirement spacy>=4.0.0 (from versions: 0.31, 0.32, 0.33, 0.40, 0.51, 0.52, 0.60, 0.61, 0.62, 0.63, 0.64, 0.65, 0.67, 0.68, 0.70, 0.80, 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87, 0.88, 0.89, 0.90, 0.91, 0.92, 0.93, 0.94, 0.95, 0.97, 0.98, 0.99, 0.100.0, 0.100.1, 0.100.2, 0.100.3, 0.100.4, 0.100.5, 0.100.6, 0.100.7, 0.101.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5, 1.1.0, 1.1.1, 1.1.2, 1.2.0, 1.3.0, 1.4.0, 1.5.0, 1.5.1, 1.6.0, 1.7.0, 1.7.1, 1.7.2, 1.7.3, 1.7.5, 1.8.0, 1.8.1, 1.8.2, 1.9.0, 1.10.0, 1.10.1, 2.0.0, 2.0.1.dev0, 2.0.1, 2.0.2.dev0, 2.0.2, 2.0.3.dev0, 2.0.3, 2.0.4.dev0, 2.0.4, 2.0.5.dev0, 2.0.5, 2.0.6.dev0, 2.0.6, 2.0.7, 2.0.8, 2.0.9, 2.0.10.dev0, 2.0.10, 2.0.11.dev0, 2.0.11, 2.0.12.dev0, 2.0.12.dev1, 2.0.12, 2.0.13.dev0, 2.0.13.dev1, 2.0.13.dev2, 2.0.13.dev4, 2.0.13, 2.0.14.dev0, 2.0.14.dev1, 2.0.15, 2.0.16.dev0, 2.0.16, 2.0.17.dev0, 2.0.17.dev1, 2.0.17, 2.0.18.dev0, 2.0.18.dev1, 2.0.18, 2.1.0, 2.1.1.dev0, 2.1.1, 2.1.2, 2.1.3, 2.1.4, 2.1.5, 2.1.6, 2.1.7.dev0, 2.1.7, 2.1.8, 2.1.9, 2.2.0.dev10, 2.2.0.dev11, 2.2.0.dev13, 2.2.0.dev15, 2.2.0.dev17, 2.2.0.dev18, 2.2.0.dev19, 2.2.0, 2.2.1, 2.2.2.dev0, 2.2.2.dev4, 2.2.2, 2.2.3.dev0, 2.2.3, 2.2.4, 2.3.0.dev1, 2.3.0, 2.3.1, 2.3.2, 2.3.3.dev0, 2.3.3, 2.3.4, 2.3.5, 2.3.6, 2.3.7, 2.3.8, 2.3.9, 3.0.0, 3.0.1.dev0, 3.0.1, 3.0.2, 3.0.3, 3.0.4, 3.0.5, 3.0.6, 3.0.7, 3.0.8, 3.0.9, 3.1.0, 3.1.1, 3.1.2, 3.1.3, 3.1.4, 3.1.5, 3.1.6, 3.1.7, 3.2.0, 3.2.1, 3.2.2, 3.2.3, 3.2.4, 3.2.5, 3.2.6, 3.3.0.dev0, 3.3.0, 3.3.1, 3.3.2, 3.3.3, 3.4.0, 3.4.1, 3.4.2, 3.4.3, 3.4.4, 3.5.0, 3.5.1, 3.5.2, 3.5.3, 3.5.4, 3.6.0.dev0, 3.6.0.dev1, 3.6.0, 3.6.1, 3.7.0.dev0, 3.7.0, 3.7.1, 3.7.2, 3.7.4, 3.7.5, 4.0.0.dev0, 4.0.0.dev1, 4.0.0.dev2, 4.0.0.dev3)
ERROR: No matching distribution found for spacy>=4.0.0

这让我觉得我只是不明白 Spacy 是如何运作的 - 它似乎不是一个“正常”的 Python 库 - 我可以在requirements.txt中指定一个新版本......看起来更多需要涉及安装过程,我怀疑与下载某些特定版本的 en_core_web_sm-3.0.0.tar.gz 模型有关(?)我在这个项目中看到...

所以我的问题是: 有人可以建议我应该尝试哪个版本的 Spacy,它会最接近 3.0.9 - 以及这样做的过程是什么? 我需要先获取一些新模型档案吗?

请原谅我对 Spacy+models 工作原理的无知 - 我不是最初写过那些很酷的东西的 NLP 开发人员 - 我只是试图修复失败的生产云功能,直到真正的 NLP 开发人员可以对功能进行正确的升级...

更长的解释: 上次部署此 CF 是在 2021 年,在 python37 运行时上。由于依赖的微服务被移动到不同的接入点,它现在停止工作了...为了让这个 CF 再次工作 - 我需要使用某些环境变量的新值重新部署它(使用新的服务 URL)。

听起来很简单,但事实并非如此!因为 CF 无法按原样部署,使用原始源代码 - 由于当前 GCP python37 运行时库的更改...

尝试“按原样”部署此 CF - 在 GCP 中失败:

ERROR: (gcloud.alpha.functions.deploy) Build failed with status: FAILURE and message: found incompatible dependencies: "flask 2.2.5 has requirement click>=8.0, but you have click 7.1.2."

所以,我试图让这个项目在 python39 运行时上运行并升级项目依赖项 - 升级 Flask,然后是 spacy,然后是 typer,然后是其他数百个:( - 并经历了多天的依赖冲突解决方案地狱 - 移动版本不同的库在requirements.txt中上下,上下,循环......

如果有人有减少痛苦的方法的建议 - 请分享!

谢谢!!!

python google-cloud-platform google-cloud-functions spacy
1个回答
0
投票

我终于完成了这项工作。这是我必须做的一切:

  • 手动安装spacy=3.7.5,需要:
    • 升级thinc>=8.2.2
  • 使用此兼容性矩阵找到了 en-core-web-sm 模型的较新兼容版本 - 它是:en-core-web-sm 3.7.1 https://github.com/explosion/spacy-models/ blob/master/compatibility.json
  • 为此模型下载了预构建轮:en_core_web_sm-3.7.1-py3-none-any.whl
  • 将其添加到 CF 数据输入目录,并requirements.txt - 替换旧的 en_core_web_sm-3.0.0.tar.gz
  • 添加了额外的必需依赖项:functions-framework>3.0.0
  • 终于能够部署到GCP了!!
© www.soinside.com 2019 - 2024. All rights reserved.