【发布时间】:2017-11-04 19:33:29
【问题描述】:
我想用Pyinstaller 创建一个exe,包括一个数据库(.db)和一张图片(.png)。我想把所有东西都放在一个single exe (--onefile) 中。我尝试将两个元素的路径直接添加到spec 文件中,但它不起作用。
这是我的spec 文件:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['back_end.py'],
pathex=['C:\\Users\\...\\site-packages\\PyQt5\\Qt\\bin', 'C:\\Users\\...\\Test_packaging'],
binaries=[],
datas=['C:\\Users\...\\Test_packaging\\database1.db', 'C:\\Users\...\\Test_packaging\\picture1.png'],
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,
a.binaries,
a.zipfiles,
a.datas,
name='back_end',
debug=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=False )
谢谢
【问题讨论】:
-
我不确定您是否可以在可执行文件 (exe) 中添加 sqlite 数据库 (db) 文件。存储数据库文件的位置取决于您,但根据我的经验,我建议将其存储在某个操作系统文件夹中,例如:
~/Library/Application Support/<APPNAME>(OS X) 或C:/Users/<USER>/AppData/Local/<APPNAME>(Windows)。请看一下 QStandardPaths。另一个提示:在你的问题中,你说it doesn't work。it doesn't work没有任何意义。您需要指定正在发生的事情、遇到的错误等。 -
我的目标是共享我的可执行文件 (
exe),我担心如果用户将exe移动到另一个没有db的文件夹中,则会产生错误。另一种方法是开发一个完整的安装过程,但我不知道这是否可以通过pyinstaller完成。 -
如果你使用标准路径,正如我提到的,并动态创建数据库,你不需要担心可执行文件在哪里。
-
例如:当用户打开应用程序时,必须检查文件夹中是否存在数据库文件:
C:/Users/<USER>/AppData/Local/<APPNAME>。如果它不存在,则需要使用作为资源包含在应用程序中的 SQL 文件来创建它。您可以使用pragma user_version 来控制下一个版本的数据库版本。请注意,使用 QStandardPaths 数据库文件将始终位于同一文件夹中,无论您的可执行文件在哪里。 (这只是一个例子,还有其他方法) -
谢谢你,我理解你的解释背后的逻辑。作为一名 Python 新手,我需要做更多的研究,但我只想确认一件事:存储
db的路径、第一次打开的预填充db等。这些元素必须在规范文件中指定。对吗?
标签: python sqlite pyqt5 pyinstaller