我正在尝试使用PyInstaller构建一个单文件EXE,它包含一个图像和一个图标.我无法为我的生活而努力--onefile.
如果我这样做--onedir,一切工作都很顺利.当我使用时--onefile,它找不到引用的附加文件(运行编译的EXE时).它找到了DLL和其他一切都很好,只是不是两个图像.
我查看了运行EXE时生成的temp-dir(\Temp\_MEI95642\例如),文件确实在那里.当我将EXE放入该临时目录时,它会找到它们.非常困惑.
这是我添加到.spec文件中的内容
a.datas += [('images/icon.ico', 'D:\\[workspace]\\App\\src\\images\\icon.ico', 'DATA'),
('images/loaderani.gif','D:\\[workspace]\\App\\src\\images\\loaderani.gif','DATA')]
Run Code Online (Sandbox Code Playgroud)
我应该补充一点,我也试过不把它们放在子文件夹中,没有什么区别.
编辑: 由于PyInstaller更新,标记的较新答案正确.
我正在努力使用pyinstaller,每当我使用kivy GUI构建这个特定的脚本并在构建之后运行.exe时我会得到致命的错误,它无法执行脚本.我通过cmd运行它,它给我错误:IOError: [Errno 2] No such file or directory: 'main.kv'
我尝试在启动构建时使用--add-data添加.kv文件以及mdb和dsn文件(在脚本中使用pypyodbc),但这样做我收到错误:( unrecognized arguments: --add-data'main.kv'其余的指定文件为--add-data follow)有没有解决方案或替代方法?
我有一个非常简单的应用程序(只是一个带有标签的窗口),我正在尝试引导自己完成变成单个可执行文件的过程。这是程序目录:
brainfreeze/
main.py # simple app
main.kv # kv language style sheet
config/
settings.json # json settings panel data (F1 bound)
saving_to/
(empty at start)
Run Code Online (Sandbox Code Playgroud)
我已经成功地使用 PyInstaller 将程序编译为可执行文件,但只使用了他们文档中描述的一个文件夹捆绑方法;我希望改用一个文件包方法。到目前为止,当我编译时,应用程序启动但它是黑屏(传统上我在main.kv无法加载时看到过这种情况)。我已经阅读了this、this、this甚至 PyInstaller文档,但没有成功编译为单个可执行文件。这是 prog_test.spec:
# -*- mode: python -*-
from kivy.deps import sdl2
from kivy.deps import glew
block_cipher = None
a = Analysis(['..\\brainfreeze\\main.py'],
pathex=['H:\\TestBed\\single_exe_test'],
binaries=[],
data=[],
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)
a.datas += [('../brainfreeze/main.kv', 'DATA'), …Run Code Online (Sandbox Code Playgroud) 我写了一个 kivy 程序,我想通过 pyinstaller 将它导出到单个 .exe 文件中。我设法导出到多个文件(标准选项),但是当我将 --onefile 选项添加到 pyinstaller 时,进程卡在一行上说:
INFO: Building PKG (CArchive) out00-PKG.pkg
Run Code Online (Sandbox Code Playgroud)
有谁知道怎么解决?只是时间问题还是我在出口过程中遗漏了什么?
我的项目:
我正在使用 python 3.6.4、kivy 1.9.0 和 pyinstaller 3.3.1。main.py 和 main.kv 文件(我只使用了 2 个文件)都在同一个文件夹中,从现在开始我将其称为 \project_folder\。在同一个文件夹中还有一个名为 icon.ico 的图标。
我也在使用 UPX (upx394a),它被下载到一个名为 \upx_path\upx394a 的文件夹中。
首先,我修改了我的 main.py 文件:
import kivy
import sys
import os
...
def resourcePath():
if hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS)
return os.path.join(os.path.abspath("."))
...
if __name__=='__main__':
kivy.resources.resource_add_path(resourcePath())
MainApp().run()
Run Code Online (Sandbox Code Playgroud)
对于导出,我运行了一个 Windows 提示;我移动到 \project_folder\ 然后导出:
pyinstaller main.py --onefile --clean -y --windowed --icon=icon.ico
--name MyApp --upx-dir=\upx_path\upx394a --exclude-module _tkinter
--exclude-module …Run Code Online (Sandbox Code Playgroud)