你需要(至少)做两件事来通过 py2app 使用 Flask 制作 macOS 应用程序:
setup.py
__init__.py
通过良好版本的
setup.py
以及正确的 packages
列表首次构建应用程序后,遇到的问题是无法提供静态内容和模板(除非您配置 resources
列表)
中的 setup.py
并重新配置应用程序的 __init__.py
)。您必须将模板文件夹和静态文件夹设置到setup.py
和__init__.py
都可以使用的位置。
但是,在您过于兴奋之前,您应该意识到您的新应用程序将遇到(重大)新问题:首先,该应用程序没有图标,没有菜单,并且无法向您提供反馈。您需要“强制退出”才能退出。通过终端运行可能更有用:
$ ./dist/myapp.app/Contents/MacOS/myapp
但是这里存在一个大问题:您只是使用绝对路径对模板的路径进行了硬编码。如果您移动应用程序,它将失去查找数据的能力:
jinja2.exceptions.TemplateNotFound
如果你仔细研究一下,你会被将模板路径设置为类似
../../templates
的可能性所诱惑。不会的。 py2app 及其魔力将在您的烧瓶路径中包含一个文件,您需要一个目录:类似 python36.zip
.setup.py
"""
This is a setup.py script generated by py2applet
Usage: python setup.py py2app
"""
APP = ['myapp.py']
DATA_FILES = []
OPTIONS = {
'packages': ['flask', 'werkzeug', 'config', 'jinja2'],
'resources': ['./server/templates', './server/static'],
}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
__init__.py
myapp = Flask(__name__,
template_folder='/path/to/dist/dir/dist/myapp.app/Contents/Resources/templates',
static_folder='/path/to/dist/dir/dist/myapp.app/Contents/Resources/static')
在Flask中,我像上面一样编辑setup.py,没有编辑init.py,它可以工作。