标签: zipapp

如何让 Flask/Jinja2 在可执行的 zip 存档中加载捆绑模板?

我已经将我的 Flask Web 应用程序打包到一个可执行的 Python 压缩档案 ( zipapp ) 中。我在加载模板时遇到问题。Flask/Jinja2 无法找到模板。

为了加载模板,我使用jinja2.FunctionLoader了一个加载函数,该函数应该能够从可执行 zip 存档内部读取捆绑文件(在本例中为 Jinja 模板)(参考:python:可执行 zip 文件可以包含数据文件吗?)。然而,加载函数无法找到模板(参见:(1)代码中),即使模板可以从加载函数外部读取(参见:(2)代码中)。

这是目录结构:

??? src
    ??? __main__.py
    ??? templates
        ??? index.html
        ??? __init__.py  # Empty file.
Run Code Online (Sandbox Code Playgroud)

src/__main__.py

import pkgutil
import jinja2
from flask import Flask, render_template


def load_template(name):
    # (1) ATTENTION: this produces an error. Why?
    # Error message:
    #   FileNotFoundError: [Errno 2] No such file or directory: 'myapp'
    data = pkgutil.get_data('templates', name)
    return data …
Run Code Online (Sandbox Code Playgroud)

python jinja2 flask zipapp

6
推荐指数
1
解决办法
722
查看次数

为使用“python -m zipapp”创建的独立应用程序导入模块的正确方法是什么?

我有一个模块,我将作为独立应用程序分发。该模块具有以下结构:

\n
$ tree -L 2 ./\n./\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 mymodule\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __main__.py\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 fun.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 mymodule.pyz\n
Run Code Online (Sandbox Code Playgroud)\n

mymodule/__main__.py包含下一行:

\n
#!/usr/bin/env python\n\nimport argparse\nimport sys\nimport os.path\nfrom mymodule.fun import Fun\n\ndef main():\n    sys.stdout.write(\'main is running\')\n    Fun().run()\n\nif __name__ == \'__main__\':\n    main()\n
Run Code Online (Sandbox Code Playgroud)\n

mymodule/fun.py包含下一行:

\n
#!/usr/bin/env python\n\nimport sys\n\nclass Fun:\n    """FUN"""\n\n    def __init__(self):\n        pass\n\n    def run(self):\n        sys.stdout.write("fun")\n
Run Code Online (Sandbox Code Playgroud)\n

如果我使用$ python -m mymodule输出运行模块\nmain is runningfun

\n

但是如果我使用它创建一个独立的应用程序$ python -m zipapp -p "/usr/bin/evn python" mymodule并运行它,$ python mymodule.pyz我会收到错误

\n
Traceback (most recent call last):\n …
Run Code Online (Sandbox Code Playgroud)

python python-import zipapp

4
推荐指数
1
解决办法
1120
查看次数

标签 统计

python ×2

zipapp ×2

flask ×1

jinja2 ×1

python-import ×1