Ответом на ваше недоразумение является концепция Unix, softlinks , которую мы могли бы сказать, что в Windows похожи на ярлыки.Давайте объясним это.
Когда вы spacy download en
, spaCy пытается найти лучшую модель small , соответствующую вашему распределению spaCy.Небольшая модель, о которой я говорю, по умолчанию en_core_web_sm
, которая может быть найдена в разных вариациях, которые соответствуют различным версиям spaCy (например, spacy
, spacy-nightly
имеют en_core_web_sm
разных размеров).
Когда spaCy находит лучшую модель для вас, он загружает ее, а затем связывает имя en
с пакетом, который он скачал, например, en_core_web_sm
.Это в основном означает, что всякий раз, когда вы ссылаетесь на en
, вы будете ссылаться на en_core_web_sm
.Другими словами, en
после связывания не является «реальным» пакетом, это просто имя для en_core_web_sm
.
Однако, по-другому это не работает.Вы не можете напрямую ссылаться на en_core_web_sm
, потому что ваша система не знает, что она установлена.Когда вы сделали spacy download en
, вы в основном установили pip.Таким образом, pip знает, что у вас установлен пакет с именем en
для вашего дистрибутива python, но ничего не знает о пакете en_core_web_sm
.Этот пакет просто заменяет пакет en
при его импорте, что означает, что пакет en
является просто программной ссылкой на en_core_web_sm
.
Конечно, вы можете напрямую загрузить en_core_web_sm
, используя команду: python -m spacy download en_core_web_sm
, или вы можете даже связать название en
с другими моделями.Например, вы можете сделать python -m spacy download en_core_web_lg
, а затем python -m spacy link en_core_web_lg en
.Это сделало бы en
именем для en_core_web_lg
, большой модели spaCy для английского языка.
Надеюсь, теперь все понятно :)