Я работал над приложением для фляги, которое я хотел бы объединить в exe с pyinstaller.После многих часов разочарований и исследований, я думаю, что я нашел ответ, но я не уверен, как действовать
Фон
приложение фляги структурировано какэто:
/flaskapp
- routes.py
- table_func.py
- froms.py
- /static
- /css
- index.css
- /templates
page.html
page.html использует шаблонизатор jinja2 с флягой для отображения таблиц, которые созданы и стилизованы с помощью панд, а также отображает формы, которые я использую для создания колбы-WTF.
Он спроектирован таким образом, что HTML остается неизменным, а содержимое изменяется на основе таблиц, которые отправляются в HTML с использованием шаблонов jinja2, например:
<div class="block">
<div class="table1">
{{ title | safe }}
</div>
<div class = "table2">
{{ table | safe }}
</div>
</div>
<br><br>
<div class="block">
<div class="table1">
{{ title | safe }}
</div>
<div class="table2">
{{ heat | safe }}
</div>
</div>
Причина нескольких деленийиспользуется для макета
выпуск
после упаковки приложения фляги с помощью pyinstall оно будет возвращать и отображать только страницы, которые не используют систему шаблонов jinja2, любыена страницах, использующих шаблоны jinja2, выдается ошибка NotImplementedError: Can't perform this operation for unregistered loader type
Так что после большого количества исследований и испытаний я почти уверен, что это связано с тем, что движок шаблонов jinja2 в колбе не поддерживается pyinstaller,особенно из-за того, что jinja2 использует API PackageLoader, как показано здесь
https://github.com/pyinstaller/pyinstaller/issues/1898
pyinstaller issue 183 seems to suggest this isn't an issue, but it still is since it isn't working]
, через дальнейшее копание через переполнение стека и документы jinja2, кажется, что лучшим решением является использование API FileSystemLoader jinja2 вместо PackageLoader.
https://stackoverflow.com/questions/38642557/how-to-load-jinja-template-directly-from-filesystem
https://stackoverflow.com/questions/38617900/need-to-package-jinja2-template-for-python
http://jinja.pocoo.org/docs/2.10/api/#loaders
Я предполагаю, что как только я преобразую это, это позволит pyinstaller упаковать приложение фляги и перестанет выдавать ошибки при попытке загрузить страницу с использованием шаблонов jinja2.
Но я не совсем уверен, как поступить с этого момента, как мне сказать, чтобы flask использовал другой загрузчик в jinja2 при вызове render_template()
Я предполагаю, что у flask есть какой-то способ настройки jinja2?