setup.py 中的 spaCy 和 spaCy 模型
spaCy and spaCy models in setup.py
在我的项目中,我将 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'],
在我的 setup.py
里面,但是我包裹的常规 pip install
和 pip install --process-dependency-links
return:
pip._internal.exceptions.DistributionNotFound: No matching distribution found for en_core_web_sm (from mypackage==0.1)
我发现这个 github issue from AllenAI 有同样的问题,但没有解决方案。
请注意,如果我直接 pip install
模型的 url,它工作正常,但我想在使用 pip install
安装我的包时将其作为依赖项安装。
不确定这是否适合您,但在 setup.py
您可以尝试:
os.system('python -m spacy download en')
调用后 setuptools.setup(...)
编辑:
根据 spaCy 文档,您现在似乎也可以通过 url 将 SpaCy 模型添加到您的 requirements.txt。然后您应该能够将模型作为模块导入到需要的地方:
import en_core_web_sm
nlp = en_core_web_sm.load()
您可以使用 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',
],
请注意,这需要您使用最新版本的 setuptools 和 wheel 构建您的项目(wheel 至少为 v0.32.0;不确定 setuptools),您的用户将只能安装您的如果他们至少使用 18.1 版的 pip,则项目。
不过,更重要的是,如果您打算在 PyPI 上分发您的包,这不是一个可行的解决方案; quoting pip's release notes:
As a security measure, pip will raise an exception when installing packages from PyPI if those packages depend on packages not also hosted on PyPI. In the future, PyPI will block uploading packages with such external URL dependencies directly.
这是我的 workaround 可安装 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')
这很麻烦,但至少它可以在不需要用户参与的情况下工作。我正在尝试 convince spaCy 团队为 PyPi 打包最重要的模型文件。
在我的项目中,我将 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'],
在我的 setup.py
里面,但是我包裹的常规 pip install
和 pip install --process-dependency-links
return:
pip._internal.exceptions.DistributionNotFound: No matching distribution found for en_core_web_sm (from mypackage==0.1)
我发现这个 github issue from AllenAI 有同样的问题,但没有解决方案。
请注意,如果我直接 pip install
模型的 url,它工作正常,但我想在使用 pip install
安装我的包时将其作为依赖项安装。
不确定这是否适合您,但在 setup.py
您可以尝试:
os.system('python -m spacy download en')
调用后 setuptools.setup(...)
编辑:
根据 spaCy 文档,您现在似乎也可以通过 url 将 SpaCy 模型添加到您的 requirements.txt。然后您应该能够将模型作为模块导入到需要的地方:
import en_core_web_sm
nlp = en_core_web_sm.load()
您可以使用 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',
],
请注意,这需要您使用最新版本的 setuptools 和 wheel 构建您的项目(wheel 至少为 v0.32.0;不确定 setuptools),您的用户将只能安装您的如果他们至少使用 18.1 版的 pip,则项目。
不过,更重要的是,如果您打算在 PyPI 上分发您的包,这不是一个可行的解决方案; quoting pip's release notes:
As a security measure, pip will raise an exception when installing packages from PyPI if those packages depend on packages not also hosted on PyPI. In the future, PyPI will block uploading packages with such external URL dependencies directly.
这是我的 workaround 可安装 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')
这很麻烦,但至少它可以在不需要用户参与的情况下工作。我正在尝试 convince spaCy 团队为 PyPi 打包最重要的模型文件。