sqlite + PyQt5到独立的exe - Python 3.6.3 + Pyinstaller

时间:2017-11-04 19:33:30

标签: python sqlite pyqt5 pyinstaller

我想用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 )

谢谢

1 个答案:

答案 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,以详细说明如何解决此问题。