You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pyproject.toml中配置spaCy模型以随pip安装自动下载?

实现spaCy模型在包安装时自动下载的两种方案

方案一:直接将模型作为依赖添加(推荐)

spaCy模型可通过wheel URL直接作为pip依赖,让pip在安装你的包时自动下载并安装模型,完全遵循标准依赖管理流程。

  1. 确认与你的spaCy版本兼容的模型版本(例如spaCy 3.7.x对应模型3.7.x)
  2. 在pyproject.toml的[project]部分,将模型的wheel链接加入依赖列表:
[project]
name = "你的包名"
version = "0.1.0"
dependencies = [
    "spacy>=3.7.0,<3.8.0",  # 匹配你的spaCy版本范围
    "en_core_web_sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.7.1/en_core_web_sm-3.7.1-py3-none-any.whl"
]

注意:替换链接中的版本号为你需要的对应版本,务必保证与spaCy版本兼容。

这种方式的优势:模型会被pip纳入依赖管理,卸载你的包时可选择一并卸载模型,安装过程更稳定可控。

方案二:使用安装后钩子脚本(适合动态场景)

如果需要在安装完成后自动执行spacy download命令,可通过setuptools的安装钩子实现:

  1. 在你的包目录下创建install_utils.py文件,内容如下:
from setuptools.command.install import install
import subprocess
import sys

class PostInstallHook(install):
    def run(self):
        # 先执行标准安装流程
        install.run(self)
        # 下载spaCy模型
        try:
            subprocess.run(
                [sys.executable, "-m", "spacy", "download", "en_core_web_sm"],
                check=True,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                text=True
            )
            print("Successfully downloaded en_core_web_sm model.")
        except subprocess.CalledProcessError as e:
            print(f"Warning: Failed to download en_core_web_sm model. Error: {e.stderr}", file=sys.stderr)
  1. 在pyproject.toml中配置setuptools的命令类,指定使用自定义的安装钩子:
[tool.setuptools]
cmdclass = {
    install = "你的包名.install_utils.PostInstallHook"
}

注意:将你的包名替换为实际的包名称,确保install_utils.py在包的可导入路径下。

这种方式的局限性:模型不会被pip作为依赖跟踪,卸载你的包时模型不会自动移除;若用户使用pip install --no-deps等特殊参数,钩子可能无法触发。

额外注意事项

  • 必须保证spaCy版本与模型版本兼容,否则会出现运行时错误
  • 如需支持多个模型,可在依赖列表中添加多个wheel链接,或在钩子脚本中执行多个spacy download命令

内容的提问来源于stack exchange,提问作者jblake1965

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:03:14