setup.py中的spaCy和spaCy模型

w4n*_*ust 5 python setup.py spacy

在我的项目中,我有spaCy作为依赖项setup.py,但是我还想添加一个默认模型。

到目前为止,我的尝试是:

install_requires=['spacy', 'en_core_web_sm'],
dependency_links=['https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.0.0/en_core_web_sm-2.0.0.tar.gz#egg=en_core_web_sm'],
Run Code Online (Sandbox Code Playgroud)

在我的包中setup.py,但既包含pip install我的包裹的常规内容,也包含pip install --process-dependency-links回报:

pip._internal.exceptions.DistributionNotFound: No matching distribution found for en_core_web_sm (from mypackage==0.1)
Run Code Online (Sandbox Code Playgroud)

从AllenAI找到了这个github问题,有同样的问题,没有解决方法。

请注意,如果pip install直接使用模型的url,它可以正常工作,但是当我的软件包使用安装时,我想将其安装为依赖项pip install

jwo*_*der 7

您可以使用pip对PEP 508 URL要求的最新支持:

install_requires=[
    'spacy',
    'en_core_web_sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.0.0/en_core_web_sm-2.0.0.tar.gz',
],
Run Code Online (Sandbox Code Playgroud)

请注意,这需要您使用最新版本的setuptools和wheel构建项目(wheel至少为v0.32.0;不确定setuptools),并且只有在以下情况下,用户才能安装项目:至少使用pip版本18.1。

不过,更重要的是,如果您打算在PyPI上分发软件包,则这不是可行的解决方案。引用pip的发行说明

作为一项安全措施,如果从PyPI安装软件包时,pip会引发异常,前提是这些软件包依赖于未在PyPI上托管的软件包。将来,PyPI将直接阻止具有此类外部URL依赖关系的包上传。


小智 6

这是我的可安装PyPi的软件包的解决方法(为清晰起见,对其进行了稍微编辑):

try:
    nlp = spacy.load('en')
except OSError:
    print('Downloading language model for the spaCy POS tagger\n'
        "(don't worry, this will only happen once)", file=stderr)
    from spacy.cli import download
    download('en')
    nlp = spacy.load('en')
Run Code Online (Sandbox Code Playgroud)

这很麻烦,但至少可以在不需要用户参与的情况下起作用。我试图说服 spaCy团队打包PyPi最重要的模型文件。