包假模式

发布于 2021-01-29 15:02:17

我想在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
被浏览
51
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如果要避免用户运行该下载文件,则必须打包并使用自己的源进行分发。此过程称为供应商(有关如何在python中最好地进行深入解释的详细信息,请参阅此出色的帖子_vendor/__init__.py对于注释示例,请参见pip项目的详细信息),它可能非常方便,但容易使您烦恼问题,如果过度。

    简而言之,您可以在包_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解释器的包中找到该包python -m spacy download de_core_news_sm,即$(which python)/site_packages/de_core_news_sm

    最后,您需要将所有模型导入从import de_core_news_sm更改为from example_pkg._vendor import de_core_news_sm,然后它应该可以工作。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看