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

时间:2018-08-10 13:27:41

标签: python pyqt5 exe pyinstaller

我真的需要帮助。我已经使用PyQt5在Python中编写了GUI。现在,我想将我的文件/文件转换为.exe文件,因此无需先安装Python就可以使用它。

我现在在互联网上搜索了将近三个半小时,同时试图解决我的问题,但是没有任何效果。我不了解PyInstaller文档,互联网上没有其他已回答的问题对我有帮助。

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

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

非常感谢您的帮助!

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

FROM rocker/r-ver:3.5.1
#install necessary libraries
RUN R -e "install.packages(c('ggplot2','shiny'))"
COPY . /usr/local/src/app
WORKDIR /usr/local/src/app
CMD ["Rscript","app_run.R"]

运行后我的错误:

# -*- 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')

1 个答案:

答案 0 :(得分:1)

如果您使用大量的库和文件,那么第一次创建pyinstaller exe可能会有点吓人。我按照下面提到的步骤进行了工作,对我有用。

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

pyinstaller filename.py

这将尝试从py文件创建一个exe,但是如果存在依赖项,则很可能会失败。没关系。它还要做的是创建一个规范文件,此后您就可以使用它创建一个exe。现在,您将在同一目录中有一个filename.spec。

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

2a)将代码运行所需的所有py文件插入其中的第一个列表       分析

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

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

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

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

最终的规格文件如下所示:

# -*- 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')

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

pyinstaller filename.spec

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