我想在python软件包中包含spacy模型de_core_news_sm。
这是我的项目:https://github.com/michaelhochleitner/package_de_core_news_sm。
我使用以下命令打包并安装项目。
python setup.py sdist bdist_wheel
pip install dist/example-pkg-mh-0.0.1.tar.gz
我要导入模块example_pkg.import-model.py。
$ python
>>> import example_pkg.import_model
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/mh/PycharmProjects/packaging_tutorial/example_pkg/import_model.py", line 2, in <module>
import de_core_news_sm
ModuleNotFoundError: No module named 'de_core_news_sm'
如何将模块'de_core_news_sm'包含在软件包中,以便在运行以下命令后安装该模块?
pip install dist/example-pkg-mh-0.0.1.tar.gz
答案 0 :(得分:1)
您在命令行上尝试过
python -m spacy download de_core_news_sm
答案 1 :(得分:1)
如果要避免用户运行该下载文件,则必须打包并使用自己的源进行分发。此过程称为供应商(请参阅this great post,以获取有关如何在python中最好地做最好的深入解释,或者是pip-project的_vendor/__init__.py
,作为获得注释的示例),它可以非常方便,但是如果过分的话,容易使您陷入烦人的问题。
简单地说,您在包的源代码目录中创建了一个名为_vendor
(或类似名称)的附加python包,并将下载的de_core_news_sm
包复制到其中:
example_pkg
├── import_model.py
├── __init__.py
└── _vendor
├── __init__.py
└── de_core_news_sm
├── de_core_news_sm-2.1.0
│ ├── accuracy.json
│ ├── meta.json
│ ├── ner/
│ ├── parser/
│ ├── tagger/
│ ├── vocab/
│ └── tokenizer
├── __init__.py
└── meta.json
您可以在site_packages
即python -m spacy download de_core_news_sm
所安装的python解释器的$(which python)/site_packages/de_core_news_sm
中找到该软件包。
最后,您需要将所有模型导入从import de_core_news_sm
更改为from example_pkg._vendor import de_core_news_sm
,然后它应该可以工作。