【发布时间】:2016-05-27 12:23:57
【问题描述】:
我有一个使用 sqlite3 的 PyQt4 应用程序。我目前有两个单独的文件:一个 .py 文件和一个 .db 文件。最初我使用 .py 文件并尝试创建一个可执行文件,只是使用这种想法可能会以某种方式链接,但是当我运行 .exe 时,它会在它到达与数据库相关的代码时中断。如何让 pyinstaller 也包含数据库?
【问题讨论】:
标签: python sqlite pyqt4 pyinstaller
我有一个使用 sqlite3 的 PyQt4 应用程序。我目前有两个单独的文件:一个 .py 文件和一个 .db 文件。最初我使用 .py 文件并尝试创建一个可执行文件,只是使用这种想法可能会以某种方式链接,但是当我运行 .exe 时,它会在它到达与数据库相关的代码时中断。如何让 pyinstaller 也包含数据库?
【问题讨论】:
标签: python sqlite pyqt4 pyinstaller
This post 帮助了我。基本上,您可以使用以下参数运行 pyinstaller 命令(假设您的脚本是 script.py 并且您的数据库是 database.db):
pyinstaller -w --add-data "database.db;." script.py
这将首先创建一个.spec 文件,将database.db 列为要包含在您的构建中的文件。创建的.spec 文件随后将用于运行构建。
正如here 解释的那样,当您运行将要创建的.exe 文件时,-w 选项可防止显示控制台。
---- 或者 ----
根据the docs,您可以先只创建.spec 文件,然后对其进行修改以列出应包含的数据文件。 script.py 的 .spec 文件是使用以下命令创建的:
pyi-makespec script.py
然后,在创建的.spec 文件中,您可以修改datas 字段:
a = Analysis(...
datas=[ ('database.db', '.') ],
...
)
这假定database.db 位于根文件夹中。如果没有,您将需要包含路径。 '.' 指定您希望数据库文件在构建中的位置(在这种情况下,'.' 是根文件夹)。要包含更多文件,您可以将更多元组 ('<file>', '<path>') 添加到 datas 列表中。
【讨论】:
您需要使用规范文件。看看documentation。
pyinstaller 会自动创建这些文件。你只需要编辑它。查看文档中的示例。要添加 README 文件,您只需将元组(源、目标)添加到“数据”:
a = Analysis(...
datas=[ ('src/README.txt', '.') ],
...
)
【讨论】:
pyinstaller --onefile --windowed your_app.py