我想用exe
创建Pyinstaller
,包括数据库(.db)和图片(.png)。我希望所有内容都成为单 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 )
谢谢
答案 0 :(得分:0)
您必须解决许多问题才能使其正常运行。例如:
第一个问题是通过根据执行模式调整路径来解决的。
[1, 2, 3, 4, 5, 6, 7, 8, 9]
第二个问题是有效地包含您的需求。首先,显而易见的解决方案是手动添加每个图像和数据库,但是我有很多图像。我转而使用通配符(*)将规范文件添加到文件夹中,而不是添加def app_path(path):
frozen = 'not'
if getattr(sys, 'frozen', False):
# we are running in executable mode
frozen = 'ever so'
app_dir = sys._MEIPASS
else:
# we are running in a normal Python environment
app_dir = os.path.dirname(os.path.abspath(__file__))
return os.path.join(app_dir, path)
。
folder/*
然后在分析中
added_files = [
( './pics/*', 'pics' ),
( './db/*', 'db' ),
]
一个完整的答案很长。我已经写过this article,以详细说明如何解决此问题。