【问题标题】:build a .exe for Windows from a python 3 script从 python 3 脚本为 Windows 构建一个 .exe
【发布时间】:2017-08-17 12:18:36
【问题描述】:

我想为 python 3 脚本构建一个可执行文件:

  • 导入 pyqtgraph(使用 pyqt5)
  • 导入 theano 和 pymc3
  • 还可以导入 numpy、scipy、sys、os
  • 打开一个使用 qt 设计器制作并存储在“.ui”文件中的简单 GUI
  • 将分布在装有 Windows 7+ 的机器上

我在几个小时内尝试了几种工具(py2exe、pyinstaller、pynsist、cx_Freeze),但每次都失败了。我的“不那么糟糕”的结果是使用 pyinstaller(见下文)没有 theano 部分(因此没有脚本的一部分)。谁能帮帮我?

我有 3 个文件:2 个“.py”文件(1 个带有主文件,另一个带有一堆定义)和一个描述 GUI 的“.ui”。该脚本会进行一些统计分析,然后绘制一些曲线。

这是我使用 python 3.5 和 cx_Freeze 失败的示例(我认为这是我尝试过的最高级的尝试,但我并不特别限于这些工具):我将 3 个文件放在一个目录中Windows机器,所有东西都被痛苦地安装(使用anaconda)。我添加了一个文件“setup.py”,对于 cx_Freeze 来说是:

from cx_Freeze import setup, Executable
import os

os.environ['TCL_LIBRARY'] = r'C:\Program Files\Python 3.5\tcl\tcl8.6'
os.environ['TK_LIBRARY'] = r'C:\Program Files\Python 3.5\tcl\tk8.6'
os.environ['PYQTGRAPH_QT_LIB'] = 'PyQt5'

setup(
    name = ‘concentrationprofiles',
    version = '0.1',
    description = 'simple tool to simulate concentration profiles. preliminary',
    author = 'SPH',
    options = dict(
        build_exe = dict(
            packages = ['os','sys','numpy','theano','pymc3','pyqtgraph'],#omitting ‘scipy’ ! for some reason when I put ’scipy’ in this list the building fails, but it works without… probably the ‘import scipy’ inside the code is properly interpreted
            includes = ['numpy.core._methods','numpy.lib.format',
                        'pyqtgraph.debug','pyqtgraph.functions',
                        'pyqtgraph.ThreadsafeTimer','cp_util_jul17'],
            include_files = ['GUI_cprofiles_jul17.ui']
        )),
    executables = [Executable(
        script='cprofiles_jul17.py',
        base='Win32GUI',
        targetName=‘concentprofiles.exe'
        )]
    )

然后我在包含 4 个文件的目录中的 anaconda 提示符(据我所知相当于命令提示符)中执行命令行“python setup.py build”。经过大量的情节和数小时的战斗,建筑物看起来很好(100 行没有错误消息并且一直运行到最后),它创建了一个带有 'exe.win-amd64-3.5' 子目录的 'build' 目录,其中包含所需的一切+ .exe。但是当我尝试运行这个 .exe 时,我什么也得不到:没有错误消息,没有控制台或窗口打开,没有快速打开关闭,我找不到日志……什么也没有

我尝试将“base”选项从“Win32GUI”更改为 base='Console' 和 base=None。在这些情况下,我猜有一个快速的控制台打开关闭,我无法读取,因为我没有找到日志。

以下是其他尝试中的一些其他不良结果:

  • py2exe:原来和我常用的python 3.6不兼容,所以我降级到3.5。但即使在 3.5 中,几行之后它就冻结了:再次没有错误消息,没有控制台或窗口打开,没有快速打开关闭,我找不到日志......什么都没有。甚至没有“构建”目录。另一次我也尝试了 python 3.4 的替代方案,但我收到了一个关于缺少“msvcr100.dll”的错误,我尝试按照论坛上的说明进行安装。当我最终获得修改系统目录的权限时,一条指令“regsvr32”失败了(这不是仅适用于 32 位吗?但没有“regsvr64”……)。我最终放弃了

  • pyinstaller:查看更新

  • pynsist:pynsist 的原理是您不会获得可执行文件,而只能获得安装程序。为什么不 ?只要我可以分发代码,我就不需要 .exe。不幸的是,在构建安装程序(没有错误)并安装它(再次没有可见错误)之后,程序什么也没给出,就像在 cx_Freeze 的情况下一样。

如果您愿意/需要,我可以添加指向脚本文件的链接。


2017 年 8 月 18 日上午 9:20 更新

根据建议,我开了一篇关于 pyinstaller 的新帖子:build a .exe for Windows from a python 3 script importing theano with pyinstaller

我邀请您回答那里的 pyinstaller 问题。如果我的问题通过 py2exe 或 cx_freeze 解决,这个问题将被标记为已回答。


9 月 2 日下午 2 点更新:

经过多集之后,我最终设法用 pyinstaller 构建了一个 .exe。

不幸的是,我未能处理“theano”模块(在我的情况下,“pymc3”模块需要该模块),我不得不修改 .py 文件并放弃部分应用程序。谁能帮我为 Windows 7+ 构建一个带有“theano”模块的 .exe?

【问题讨论】:

  • 我建议每个帖子只回答一个问题,否则很难将其标记为已回答。因此,对于这篇文章,问题是您已经使用 cx_freeze 或 py2exe 创建了一个可执行文件,在您启动它之后它什么也不做。我强烈建议包含py2execx_freeze 标签,以便这些主题的专家看到您的问题。删除executablepython-3.x 标签,它们不会增加太多。我也怀疑它与pyqtgraph 有关,这是一个纯python 库。最好在单独的帖子中询问 pyinstaller/pyqtgraph 问题,并包含错误消息和适当的标签。
  • 好的,我会的,谢谢
  • py2exe -- 似乎只与 Python 3.3 或更早版本兼容 -- 尽管我偶然发现了一个最近仍处于测试阶段的 python 3.6/3.7 端口

标签: python windows py2exe cx-freeze


【解决方案1】:

要创建 Python 程序的可执行文件,请在 CMD 中运行以下命令。首先您需要安装 pyinstaller,使用以下命令:

pip install pyinstaller

然后执行以下操作以创建 Python 程序的一个可执行文件,首先,转到 Python (.py) 文件所在的程序路径(使用cd),然后:

pyinstaller -w -F YourPyFile

【讨论】:

  • 在尝试编译 Python 3.7 和 PyQtGraph 和 Python-Qt 的组合时,这当然在 Windows 上不起作用——因为 PyQtGraph 破坏了最终的可执行文件,因为它似乎无法处理 PyQtGraph 和我最近测试了这个
猜你喜欢
  • 2018-09-20
  • 2021-09-25
  • 2021-06-19
  • 1970-01-01
  • 2023-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多