Open4

RyeでURLからtar.gz, whlをダウンロードする

蒼百合蒼百合

PythonでspaCyを使って自然言語処理をするとき

import spacy

# ここでは en_core_web_sm を利用する
nlp = spacy.load("en_core_web_sm")

のようにモデルを利用する.

しかしモデルは spacy 本体には含まれないため

# ここでは en_core_web_sm をダウンロードする
python -m spacy download en_core_web_sm

のようにダウンロードする必要がある.

https://spacy.io/usage/models

蒼百合蒼百合

Rye でプロジェクトを管理しているので

rye add spacy
rye sync

として spacy をダウンロードした後に

rye run python -m spacy download en_core_web_sm

としてみたところ, No module named pip と怒られた.

なるほど,確かに pip は入れていない.
ならば

rye add pip
rye sync
rye run python -m spacy download en_core_web_sm

とすれば良い訳だ.

...
......
.........

いや,待って欲しい.
それはいくらなんでもナンセンスだろう.
これでは何のために Rye を使っているのかがわからない.

蒼百合蒼百合

pip がないことを怒られたということは,spacy download は内部で pip を呼び出しており,これでダウンロードできるモデルは pip でダウンロードできる形式である可能性が高い.

ならば公開されているURLがわかれば

rye add <name> --url <url>
rye sync

の形式でダウンロードできるだろう.

さて en_core_web_sm は

https://github.com/explosion/spacy-models/releases/tag/en_core_web_sm-3.7.1

執筆時点での en_core_web_sm の最新版

で tar.gz および whl の形式で公開されていた.
案の定である.

あとは愚直に

rye add en_core_web_sm --url 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
rye sync

とすれば良さそうだ.

結果として問題なくダウンロードでき

import spacy

nlp = spacy.load("en_core_web_sm")

も動作した.

蒼百合蒼百合

(補足)

rye add en_core_web_sm --url 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

に代えて

rye add en_core_web_sm --url https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.7.1/en_core_web_sm-3.7.1.tar.gz

でも問題なくダウンロードできた.