- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 pyinstaller
构建我的 flask 应用程序,除了 Jinja2 模板出现问题外,一切正常。
它给了我 jinja2.exceptions.TemplateNotFound
,
我尝试将 from app import template
放在模板文件夹中,但它没有用(我猜是因为它们不包含任何 py
文件) .
我还尝试更改 .spec
文件以包含 templates
文件夹
added_files = [
( '..\\CommerceApp\\app\\templates', 'templates' ),
( '..\\CommerceApp\\app\\static', 'static' )
]
a = Analysis(['..\\CommerceApp\\run.py'],
pathex=['D:\\PythonProjects\\CommerceAppExe'],
binaries=None,
datas=added_files,
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
但是也没用,和我自己手动复制文件夹一样。
有什么方法可以包含与 .exe 捆绑在一起的模板吗?
编辑
这是我的spec
文件
# -*- mode: python -*-
block_cipher = None
a = Analysis(['..\\CommerceApp_withPyInstaller\\run.py'],
pathex=['D:\\PythonProjects\\CommerceAppExe'],
binaries=None,
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='SupplyTracker',
debug=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='SupplyTracker')
编辑2
已接受的答案更改为 gmas80
因为它解决了问题。
编辑3
另外我才意识到,我可以用我的包名创建一个新文件夹并填写静态模板 css
、html
等,它会起作用(gmas80 脚本的类似结果)
最佳答案
我不认为问题出在 https://stackoverflow.com/a/35816876/2741329 中描述的内容.我刚刚能够使用 Jinja2
卡住应用程序。
在我的规范文件中,我使用这种方法来收集所有模板:
from PyInstaller.building.build_main import Analysis, PYZ, EXE, COLLECT, BUNDLE, TOC
def collect_pkg_data(package, include_py_files=False, subdir=None):
import os
from PyInstaller.utils.hooks import get_package_paths, remove_prefix, PY_IGNORE_EXTENSIONS
# Accept only strings as packages.
if type(package) is not str:
raise ValueError
pkg_base, pkg_dir = get_package_paths(package)
if subdir:
pkg_dir = os.path.join(pkg_dir, subdir)
# Walk through all file in the given package, looking for data files.
data_toc = TOC()
for dir_path, dir_names, files in os.walk(pkg_dir):
for f in files:
extension = os.path.splitext(f)[1]
if include_py_files or (extension not in PY_IGNORE_EXTENSIONS):
source_file = os.path.join(dir_path, f)
dest_folder = remove_prefix(dir_path, os.path.dirname(pkg_base) + os.sep)
dest_file = os.path.join(dest_folder, f)
data_toc.append((dest_file, source_file, 'DATA'))
return data_toc
pkg_data = collect_pkg_data('<YOUR LIB HERE>')
然后将 pkg_data
添加到 COLLECT
(1 个文件夹)或 EXE
(1 个文件).spec。
在 1 文件夹解决方案中,您应该能够在创建的子文件夹中找到所有模板。
编辑
这可能有效(假设您有一个包(即,您有一个 __init__.py
)遵循这些建议:http://flask.pocoo.org/docs/0.10/patterns/packages/):
# -*- mode: python -*-
# <<< START ADDED PART
from PyInstaller.building.build_main import Analysis, PYZ, EXE, COLLECT, BUNDLE, TOC
def collect_pkg_data(package, include_py_files=False, subdir=None):
import os
from PyInstaller.utils.hooks import get_package_paths, remove_prefix, PY_IGNORE_EXTENSIONS
# Accept only strings as packages.
if type(package) is not str:
raise ValueError
pkg_base, pkg_dir = get_package_paths(package)
if subdir:
pkg_dir = os.path.join(pkg_dir, subdir)
# Walk through all file in the given package, looking for data files.
data_toc = TOC()
for dir_path, dir_names, files in os.walk(pkg_dir):
for f in files:
extension = os.path.splitext(f)[1]
if include_py_files or (extension not in PY_IGNORE_EXTENSIONS):
source_file = os.path.join(dir_path, f)
dest_folder = remove_prefix(dir_path, os.path.dirname(pkg_base) + os.sep)
dest_file = os.path.join(dest_folder, f)
data_toc.append((dest_file, source_file, 'DATA'))
return data_toc
pkg_data = collect_pkg_data('<yourapplication>') # <<< Put the name of your package here
# <<< END ADDED PART
block_cipher = None
a = Analysis(['..\\CommerceApp_withPyInstaller\\run.py'],
pathex=['D:\\PythonProjects\\CommerceAppExe'],
binaries=None,
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='SupplyTracker',
debug=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
pkg_data, # <<< Add here the collected files
strip=False,
upx=True,
name='SupplyTracker')
关于python - Pyinstaller Jinja2 TemplateNotFound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35811448/
我需要在 pyinstaller“onefile”可执行文件中包含一个 DLL 和一个文本文件。我可以只添加 DLL,但如果我尝试指定这两个文件,pyinstaller 会提示。我宁愿使用命令行选项(
我编写了一个 python 应用程序,它使用 pdfkit 包来打印 PDF。我正在使用 pyinstaller 在 Ubuntu 上构建此应用程序的可执行文件。 pdfkit 依赖于使用 sudo
我想弄清楚为什么 PyInstaller 一直包含 PyQt 的 Windows dll 文件,即使我的应用程序不使用 PyQt。所以,我想知道如何确定 为什么 PyInstaller 认为 PyQt
我在我的 mac osx sierra 下安装了 2 个 python 版本: python 3.5 python 2.7 我用这个命令在python3.5下安装了pyinstaller: pytho
所以,标题基本上涵盖了我的问题。我已经使用 virtualenv 创建了一个项目,例如我必须 source ./env/bin/activate 运行我的脚本。 当我尝试使用以下命令创建可执行文件时:
大约一个月前,我使用 PyInstaller 和 Inno Setup 为我的 Python 3 脚本生成了一个安装程序。我的 AVG Business Edition AntiVirus 刚刚开始提
我正在尝试使用 pyinstaller 制作可执行文件,方法如下: pyinstaller -F --add-binary="sometool.exe:."myapp.py 构建工作正常。但是,如果我
我想要卡住一个 Python 应用程序,作为其功能之一,它能够使用 PyInstaller 生成卡住的 Python 应用程序。这是一个最小的应用程序,显示了我想要实现的目标: import PyIn
运行 pyinstaller myfile.spec 下面的回溯 Traceback (most recent call last): File "/usr/local/bin/pyinstall
首先, native 运行 Fedora 13,PyInstaller 版本为 1.5.1 我在生成规范时确实使用了 --onefile 。 从 Python 解释器中运行“import atexit
我想使用以下命令安装 pyinstaller 模块: pip install pyinstaller 但我总是得到以下错误: 最佳答案 我尝试了一切,但最终我找到了解决方案。 您只需将 pip 从 1
我在 Windows 上运行 Python 3.5.3,并尝试使用 pip 安装 Pyinstaller。它似乎工作 - 没有错误或任何东西,就像 pip 一样非常简单。 我试过 import -m
我已经使用 pyinstaller 在 Windows 10 64 位上从 python 脚本创建了一个 exe。我如何设置 exe 以便它在我的另一台装有 Windows 8 32 位的机器上运行。
我使用以下命令安装了最新版本的 PyInstaller:pip install https://github.com/pyinstaller/pyinstaller/archive/develop.z
我用 python 编写程序来打开路径给出的一些可执行文件。我使用: os.startfile(路径) 启动程序。当我在 IDLE 中运行 script.py 时,它工作正常,但是当我使用 pyins
我在 Python 中构建了一个关键字搜索工具,然后使用 Pyinstaller 将其转换为 .exe 格式,因此我工作场所的人无需安装 Python 即可使用它。 我已通过电子邮件将其以 RAR 文
我遇到了一个问题。我正在使用 pyinstaller 将代码导出到 .exe。代码包括 tkinter、PIL 和 keyboard 模块。软件在我使用 Python 的 PC 上运行完美,而在没有
我正在尝试从我的 python 项目中创建一个可执行文件。我正在使用函数“make_executable”构建可执行文件。 运行添加数据的命令会引发如下错误:pyinstaller: 错误: 无法识别
我想从 .py 创建 .exe 文件。如果我运行 .py 文件,它运行良好,我没有问题。但是当我运行 pyinstaller 创建的 .exe 文件时,我无法在命令行中输入(键入)任何内容。 我已经尝
我有一个小应用程序,我正在尝试针对 Windows 机器构建它。该程序创建一个 OpenVPN 连接。如果我构建程序并运行它,它首先会打开一个控制台作为程序输出。如果我通过 -w pyinstalle
我是一名优秀的程序员,十分优秀!