- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 Pyinstaller 构建单文件 EXE 文件,它包含 Sqlite 数据库文件,它不能与 --onefile 一起使用,但在正常情况下意味着(许多文件)它工作 100%。
我正在做的是在 .py 脚本中:
import os, sys
def resource_path(relative_path):
try:
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
我用它来包含 Sqlite 文件,它工作 100%在 .spec 文件中,我输入了这个:
a.datas.append(('sqlite.db', 'sqlite.db', 'DATA'))
当我构建尽可能多的文件时,它 100% 工作,我可以从我的应用程序插入信息,但作为 --onefile 我不能
我可以用 Sqlite 数据库做这个吗?如果我不能,有没有数据库可以帮助我?
最佳答案
如果您正在使用 --onefile 选项(即将所有内容捆绑到一个可执行文件中),当您运行 your_app_name.exe 时,Pyinstaller 会将您的数据解压缩到一个临时文件中文件夹,路径设置为 sys._MEIPASS。
def path_to_temp(relative_path):
try:
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
因此,当您启动应用程序时,您在规范文件中指定的数据文件也将被提取到这个临时位置。
a.datas.append(('sqlite.db', 'sqlite.db', 'DATA'))
您可以通过访问临时位置来检查提取的文件。您只需将其添加到上述代码中即可获得其路径
print base_path
现在在这里您还会看到您的数据库文件。现在对其进行一些更改。然后退出您的应用程序并再次启动它。获取新的临时位置并检查您所做的更改是否已反射(reflect)回来。答案是否。因为它不是重新打包提取的文件。
因此数据文件可以是图像或声音文件之类的文件,甚至是不会被程序修改的数据库文件。
您无需将数据库文件包含在捆绑的 exe 中。而是在 Appdata 中以您的应用程序名称在运行时创建一个文件夹,并将您的数据库文件存储在那里。
使用 sqlite3 的应用示例。
dir_path = os.path.join(os.environ['APPDATA'], 'YOUR_APP_NAME')
if not os.path.exists(dir_path):
os.makedirs(dir_path)
file_path = os.path.join(dir_path, 'your_database_file.sqlite')
sqlite3.connect(file_path)
这将在 AppData\Roaming 目录中创建一个以您的应用名称命名的文件夹,您的数据库文件将存储在那里。
关于python - Pyinstaller 无法将信息插入到 sqlite 数据库文件 --onefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33838909/
我有一个应用程序,我想将其打包到一个文件中,但在使用 --onefile 选项(包括 html、js 和 css 文件)时遇到了问题。该过程在运行 --onedir 时运行良好(当然是在将各个数据文件
请阅读所有这篇文章并帮助我。 我想用 pyinstaller 创建 --onefile 可执行文件。 我在开发方面有这些: Windows 8.1 x64 Qt 5.2.1 python 27 PyQ
我用“pyinstaller --onefile myapp.py”打包了一个 python 应用程序,它创建了一个可执行文件,并且该应用程序运行良好。现在我希望能够从系统中导入一个模块(如果存在),
我知道我不是第一个提问的,但论坛上的其他答案帮不了我,所以我来提问。我有一个只有导入的简短(181 行)python 脚本 import numpy as np import matplotlib.p
我正在尝试使用 PyInstaller 构建一个包含图像和图标的单文件 EXE。我一辈子都无法让它与 --onefile 一起使用。 如果我这样做 --onedir 它工作得很好。当我使用 --one
我有一个有效的 Python 3 脚本 inventoryScraper.py,我正试图将其制作成一个我可以分发的 1 文件可执行文件。我一直在将 Pyinstaller 3 与 Python 3 一
我正在尝试将图像添加到 Pyinstaller 生成的一个文件中。我读过很多这样的问题/论坛 one那one但仍然无法正常工作。 我知道对于一个文件操作,PyinSTLler 会生成一个可以通过 sy
我正在尝试将包含图像的文件夹嵌入到生成的(使用 PyInstaller)可执行文件中。但这对我不起作用。即使只有一张简单的图片! 我的 main.spec 文件中的 datas 变量如下所示: dat
我正在尝试使用 pyinstaller 打包 cli 应用程序(当前适用于 macos)。我阅读 pyinstaller 文档的最初印象是,当使用 --onefile 选项时,我将能够将所有必需的文件
我正在尝试使用 Pyinstaller 构建单文件 EXE 文件,它包含 Sqlite 数据库文件,它不能与 --onefile 一起使用,但在正常情况下意味着(许多文件)它工作 100%。 我正在做
我正在尝试使用 PyInstaller 2.0 将我的 py 脚本捆绑为 .exe。我可以捆绑脚本,但在我的脚本中,我需要打开一个应该捆绑在 exe 中的文件(因此它是可移植的)。我在执行此操作时遇到
我听到 3 年前的问题,显然有无穷大的解决方案。我想找到这个无限集合中的一个。 问题: 编写程序(只有一个文件示例“selfsource.c”)在 stdout 上打印自己的源代码并退出。 所有技术都
我有一个应用程序,其中有两个可执行文件:Flask-SocketIO-Server 和 CefPython 浏览器。我将这两个可执行文件与 PyInstaller 捆绑在一起。带有 --onefile
我创建了一个 exe 文件,它在某些 Windows 机器上运行良好,但在其他机器上运行失败。 我还找不到失败的原因。 重要数据: x64 可执行程序 Windows 7 python 3.5.1 p
我正在使用 PyInstaller 使用 .spec 文件“编译”一个程序。我正在使用 .spec 文件,因为我需要在程序中包含一个额外的文件。当我尝试执行 PyInstaller --onefile
我已经从 python tkinter GUI 成功创建了一个包含图像的 EXE 文件。请参阅以下代码: lblLogo=Label(main) lblLogo.grid(row=3,column=1
我正在尝试使用 PyInstaller 1.5 编译 PyQt 程序。当我使用 --onedir(默认)时,以下两个程序对我来说都很好,但这会创建相当大的程序。我想使用 --onefile 选项,但是
我已经使用 Pyinstaller 创建了一个 exe 文件。 pyinstaller.exe --onefile --icon='Loco.ico program.py 在该程序中,我在绘图中包含了
我有一个小脚本,它使用 tableau rest api 从 tableau View 下载数据。由于脚本在公司环境中运行,因此我必须使用 SSL。那就是 python-certifi-win32 的
我正在使用 PyInstaller 将我的应用程序捆绑到一个 .exe 文件中。 问题是它可以使用 --onedir 选项正常工作,但是使用 --onefile 构建时找不到模块。 --onedir
我是一名优秀的程序员,十分优秀!