【发布时间】:2016-02-22 11:39:37
【问题描述】:
我使用 PyInstaller 成功打包了适用于 Windows 的 Kivy 应用程序,并且我的 app.exe 运行没有任何问题。 (.spec:Kivy 1.9.1 Windows package .spec single exe)
为了便于分发,我想将我的文件打包成一个独立的 .exe。我的 .nsi 文件:
SilentInstall silent
Section
InitPluginsDir
Setoutpath KanjiOrigin
File /r "dist\KanjiOrigin\*"
ExecWait "dist\KanjiOrigin\KanjiOrigin.exe"
Setoutpath $TEMP
SectionEnd
一个 .exe 的构建没有错误:http://pastebin.com/h91jzGgY
但是,当运行 NSIS 制作的这个 .exe 时,应用程序会一直运行,直到我需要连接到位于 data\db\Kanji-story.db 的内部数据库,但找不到该数据库。 (打开的时候.exe就在里面,所以数据库已经包含进去了)。
sqlite3.OperationalError: unable to open database: data\db\Kanji-story.db
当我使用 7zip 解压我的 .exe 并尝试从 PyInstaller 运行 KanjiOrigin.exe 时,我收到以下错误:D:\path\KanjiOrigin\KanjiOrigin.exe is not a valid Win32 application。 (不确定这是否相关)。
编辑 2
我不知道发生了什么变化,但是现在使用 7zip 打开 NSIS .exe 时,提取 PyInstaller .exe 不再出错。 但是,当尝试运行提取的 PyInstaller .exe 时,出现以下错误:
PyInstaller Bootloader 3.x
LOADER: executable is D:\path\KanjiOrigin\KanjiOrigin.exe
LOADER: homepath is D:\path\KanjiOrigin
LOADER: _MEIPASS2 is NULL
LOADER: archivename is D:\path\KanjiOrigin\KanjiOrigin.exe
LOADER: pyi_arch_check_cookie failed
LOADER: archivename is D:\path\KanjiOrigin\KanjiOrigin.pkg
LOADER: Cannot open archive: D:\path\KanjiOrigin\KanjiOrigin.pkg
Cannot open self D:\path\KanjiOrigin\KanjiOrigin.exe or archive D:\path\KanjiOrigin\KanjiOrigin.pkg
此外,包含的数据库似乎没有损坏,因为提取后我可以使用 sqlitebrowser (http://sqlitebrowser.org/) 成功打开它。
我做错了什么?是Setoutpath $TEMP吗?
编辑:
如果我在 NSIS 创建的 .exe 之外手动包含具有相同文件夹结构 (data\db\Kanji-story.db) 的数据库,它可以找到数据库吗?为什么它可以找到外部数据库,但不能找到 NSIS .exe 中包含的内部数据库?
【问题讨论】: