代码之家  ›  专栏  ›  技术社区  ›  ZioByte

了解jinja2.Packageloader()

  •  0
  • ZioByte  · 技术社区  · 7 年前

    我有一个(主要是工作的)python3程序使用 mkepub .

    因为我需要为我的特定目的修改它,我开始把它拉到我的目录树中(当我完成后,我会发送一个拉请求,因为我认为我的mod可能对其他人有用,但这不是问题所在)。

    我当前的目录树是:

    .
    ├── markright
    │   ├── book_parser.py
    │   ├── docx_emitter.py
    │   ├── emitter.py
    │   ├── epub_emitter.py
    │   ├── html_emitter.py
    │   ├── __init__.py
    │   ├── mkepub
    │   │   ├── __init__.py
    │   │   ├── mkepub.py
    │   │   ├── templates
    │   │   │   ├── container.xml
    │   │   │   ├── cover.xhtml
    │   │   │   ├── package.opf
    │   │   │   ├── page.xhtml
    │   │   │   ├── toc.ncx
    │   │   │   └── toc.xhtml
    │   │   └── tests
    ├── markright.py
    

    mkepub 从 epub_emitter.py 以这种方式:

    from . import mkepub  # <-- here I get problems
    ...
    epub = mkepub.Book(**kwargs)
    

    什么进口的 ./mkepub/__init__.py :

    from .mkepub import Book  # <-- here I get problems
    

    ... 最终得到了有问题的代码:

    import jinja2
    ...
    env = jinja2.Environment(loader=jinja2.PackageLoader('mkepub'))
    

    import ing)出现以下错误:

    Traceback (most recent call last):
      File "/home/mcon/Documents/Libro/sigil/markright/venv/lib/python3.7/site-packages/setuptools-40.8.0-py3.7.egg/pkg_resources/__init__.py", line 359, in get_provider
    KeyError: 'mkepub'
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/home/mcon/Documents/Libro/sigil/markright/markright.py", line 1, in <module>
        from markright import *
      File "/home/mcon/Documents/Libro/sigil/markright/markright/__init__.py", line 4, in <module>
        from .epub_emitter import EPUBemitter
      File "/home/mcon/Documents/Libro/sigil/markright/markright/epub_emitter.py", line 1, in <module>
        from . import mkepub
      File "/home/mcon/Documents/Libro/sigil/markright/markright/mkepub/__init__.py", line 1, in <module>
        from .mkepub import Book
      File "/home/mcon/Documents/Libro/sigil/markright/markright/mkepub/mkepub.py", line 49, in <module>
        env = jinja2.Environment(loader=jinja2.PackageLoader('mkepub'))
      File "/home/mcon/Documents/Libro/sigil/markright/venv/lib/python3.7/site-packages/jinja2/loaders.py", line 224, in __init__
        provider = get_provider(package_name)
      File "/home/mcon/Documents/Libro/sigil/markright/venv/lib/python3.7/site-packages/setuptools-40.8.0-py3.7.egg/pkg_resources/__init__.py", line 361, in get_provider
    ModuleNotFoundError: No module named 'mkepub'
    

    注意如果我 相同的 venv ).

    我错过了什么?

    当然,我希望尽可能少的改变(最好是什么都不改变!)在里面 mkepub公司 以避免在以后的拉请求中出现问题。我可以毫无问题地更改我的代码。

    在此过程中,我还想了解Python3中更好的路径分辨率。

    mkepub公司 凡夫 然后编辑里面的文件( .../venv/lib/python3.7/site-packages/mkepub/... )看起来很难看。还有别的办法吗?

    0 回复  |  直到 7 年前