web-dev-qa-db-ja.com

setup.pyのspaCyモデルとspaCyモデル

私のプロジェクトでは、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 installpip install --process-dependency-linksの両方が返されます:

pip._internal.exceptions.DistributionNotFound: No matching distribution found for en_core_web_sm (from mypackage==0.1)

私はこれを見つけました AllenAIからのgithubの問題 同じ問題で解決策はありません。

モデルのURLを直接pip installすると正常に機能しますが、パッケージをpip installでインストールするときに、依存関係としてインストールしたいことに注意してください。

9
w4nderlust

PEP 508URL要件に対するpipの最近のサポートを使用できます。

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でパッケージを配布する場合、これは実行可能なソリューションではありません。 pipのリリースノートを引用

セキュリティ対策として、PyPIからパッケージをインストールするときに、それらのパッケージがPyPIでホストされていないパッケージに依存している場合、pipは例外を発生させます。将来的には、PyPIはそのような外部URL依存関係を持つパッケージの直接アップロードをブロックします。

2
jwodder

これがうまくいくかどうかはわかりませんが、_setup.py_で次のことを試してみてください。

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

setuptools.setup(...)を呼び出した後

編集

SpaCyのドキュメントによると、URLを介してrequirements.txtにSpaCyモデルを追加できるようになりました。これで、モデルを必要な場所にモジュールとしてインポートできるようになります。

_import en_core_web_sm
nlp = en_core_web_sm.load()
_

参照: https://spacy.io/usage/models

0
Wes Doyle