Модели spaCy и spaCy в setup.py - PullRequest
       6

Модели spaCy и spaCy в setup.py

0 голосов
/ 20 ноября 2018

В моем проекте в моем setup.py есть зависимость spaCy, но я хочу добавить также модель по умолчанию.

До сих пор моя попытка была:

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 от AllenAI с той же проблемой инет решения.

Обратите внимание, что, если я pip install URL-адрес модели напрямую, он работает нормально, но я хочу установить его в качестве зависимости, когда мой пакет устанавливается с pip install.

Ответы [ 3 ]

0 голосов
/ 20 ноября 2018

Вы можете использовать недавнюю поддержку pip для требований URL PEP 508:

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 (как минимум v0.32.0для колеса; не уверен насчет setuptools), и ваши пользователи смогут установить ваш проект, только если они используют как минимум версию 18.1 pip.

Что еще более важно, хотя это не является жизнеспособным решением, есливы намерены распространять свой пакет на PyPI; цитирование заметок о выпуске pip :

В качестве меры безопасности pip выдаст исключение при установке пакетов из PyPI, если эти пакеты зависят от пакетов, также не размещенных в PyPI.В будущем PyPI будет напрямую блокировать загрузку пакетов с такими внешними URL-зависимостями.

0 голосов
/ 16 апреля 2019

Вот мой обходной путь для пакета, устанавливаемого в 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')

Это громоздко, но, по крайней мере, работает без привлечения пользователя. Я пытаюсь убедить команду spaCy упаковать самые важные файлы моделей для PyPi.

0 голосов
/ 20 ноября 2018

Не уверен, что это работает для вас, но в setup.py вы можете попробовать:

os.system('python -m spacy download en')

после звонка setuptools.setup(...)

редактировать :

Согласно документам spaCy, похоже, что теперь вы можете добавлять модели SpaCy в свои требования.txt также через URL. После этого вы сможете импортировать модель как модуль, где это требуется:

import en_core_web_sm
nlp = en_core_web_sm.load()

Ссылка: https://spacy.io/usage/models

...