使用PyQt5将多个Python文件转换为exe

问题描述 投票:0回答:1

我真的需要帮助。我使用PyQt5在Python中编写了一个GUI。现在我想将我的文件/文件转换为.exe文件,因此您可以在不先安装Python的情况下使用它。

我现在在网上搜索差不多三个半小时,同时试图解决我的问题,但没有任何作用。我不理解PyInstaller文档,互联网上没有其他回答的问题帮助了我。

我有七个Python文件(面向对象编程)。主程序和模块。如何在不安装Python的情况下使这个程序工作(分别如何将它们转换为.exe?)

我使用的是Windows 10,安装了Python 3.5,PyQt5和PyInstaller 3.3.1。

非常感谢您的帮助!

我的.spec文件目前看起来像这样:

# -*- mode: python -*-

block_cipher = None


a = Analysis(['MainFile.py', 'module1.py', 'module2.py', 'module3.py', 'module4.py', 'module5.py', 'module6.py'],
             pathex=['C:\\Users\\MyName\\Documents\\ProgramFolder'],
             binaries=[],
             datas=[],
             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,
          exclude_binaries=True,
          name='MainFile',
          debug=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               name='MainFile')

运行后我的错误:

Traceback (most recent call last):
    File "MainFile.py", line 11, in <module>
    File "C:\Users\MyName\AppData\Local\Programs\Python\Python35-32\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module
      exec(bytecode, module.__dict__)
    File "module2.py", line 2, in <module>
    File "C:\Users\MyName\AppData\Local\Programs\Python\Python35-32\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 714, in load_module
      module = loader.load_module(fullname)
ImportError: DLL load failed: The specified procedure was not found
[11868] Failed to execute script MainFile
python pyqt5 exe pyinstaller
1个回答
1
投票

如果你使用了大量的库和文件,那么第一次创建pyinstaller exe可能有点令人生畏。我按照下面提到的步骤操作,它对我有用。

1)使用以下命令创建spec文件:

pyinstaller filename.py

这将尝试从py文件创建一个exe,但如果有依赖项,很可能会失败。这没关系。它还做了什么是创建一个spec文件,您可以使用它来创建一个exe。现在,您将在同一目录中拥有filename.spec。

2)spec文件实际上是pyinstaller运行以创建你的exe的python代码。可以将其视为创建exe所需的配置文件。使用任何文本编辑器打开spec文件,然后按照以下步骤中的说明进行编辑。

2a)在Analysis中的第一个列表中插入代码运行所需的所有py文件

例如:Analysis(['file1.py', 'file2.py', 'file3.py'],

2b)在spec文件中插入数据列表中所需的所有数据文件(在Analysis中)。每个条目都是一个元组。元组中的第一个元素将是资源的路径,第二个条目将是输出中的文件夹名称。

例如:datas=[('csv\\', 'csv'), ('plotly-latest.min.js', '.')],

这将复制输入中csv文件夹的内容,并在输出根文件夹中创建一个csv文件夹并将其粘贴到那里。它还将复制js文件并将其粘贴到输出的根文件夹中。

最终的spec文件看起来像这样:

# -*- mode: python -*-
import sys
sys.setrecursionlimit(5000)

block_cipher = None


a = Analysis(['file1.py', 'file2.py', 'file3.py'],
             pathex=['C:\\Users\\Username\\PycharmProjects\\myproject'],
             binaries=[],
             datas=[('csv\\', 'csv'), ('plotly-latest.min.js', '.')],
             hiddenimports=['scipy._lib.messagestream', 'cython', 'sklearn', 'sklearn.ensemble', 'sklearn.neighbors.typedefs', 'sklearn.neighbors.quad_tree', 'sklearn.tree._utils', 'ipykernel.datapub'],
             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,
          exclude_binaries=True,
          name='myproject',
          debug=False,
          strip=False,
          upx=True,
          console=True,
          icon='icons\\appicon.ico')
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               name='myproject')

规范准备好后,您现在可以通过将spec文件传递给pyinstaller命令来创建exe:

pyinstaller filename.spec

这将创建一个exe。如果您设法创建一个exe,但如果exe只打开一个控制台并关闭,则表示该过程中存在错误。您可以在命令提示符下打开exe,读取错误并进一步调试。

© www.soinside.com 2019 - 2024. All rights reserved.