从Python 3脚本构建Windows的.exe文件

3
我想创建一个可执行的Python 3脚本,它具有以下功能:
  • 导入pyqtgraph(使用pyqt5)
  • 导入theano和pymc3
  • 还要导入numpy,scipy,sys,os
  • 打开一个由qt designer制作的简单GUI,并存储在“.ui”文件中
  • 将分发到Windows 7+机器上
我尝试了几个工具(py2exe,pyinstaller,pynsist,cx_Freeze),但每次都失败了。我的“最好的”结果是使用pyinstaller(请参见下文),但没有theano部分(因此没有一部分脚本)。有人能帮忙吗?
我有3个文件:2个“.py”文件(1个主文件和另一个包含一堆定义的文件)和描述GUI的“.ui”文件。脚本进行一些统计分析,然后绘制一些曲线。
这是我使用Python 3.5和cx_Freeze失败的示例(我认为这是我最先进的尝试,但我不限于特定的工具):我将我的3个文件放在一个目录中,在那里一切都被痛苦地安装了(使用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'
        )]
    )

我在Anaconda控制台中执行命令行'python setup.py build'(据我所知,这相当于命令提示符),在包含4个文件的目录中进行操作。经过很多次尝试和数小时的奋斗,构建看起来很好(100行没有错误消息并一直到最后),它创建了一个“build”目录,其中包含一个'exe.win-amd64-3.5'子目录,其中包含所有必需的内容以及.exe文件。但是,当我尝试运行此.exe时,什么也没有发生:没有错误消息,没有控制台或窗口打开,也没有快速的打开和关闭,我找不到日志...就是什么都没有。
我尝试将选项“base”从'Win32GUI'更改为base ='Console'和base = None。在这些情况下,我想有一个快速的控制台打开关闭,但我无法阅读,因为我找不到日志。
以下是其他几次尝试期间的结果: py2exe:结果与我的常规Python 3.6不兼容,因此我降级到了3.5。但即使在3.5中,在几行之后它也会冻结:再次没有错误消息,没有控制台或窗口打开,也没有快速的打开和关闭,我找不到日志…什么也没有。甚至没有'build'目录。另一次我也尝试了一个使用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解决,则将标记此问题已解决。
更新:2017年9月2日下午2点,我终于通过pyinstaller成功构建了.exe文件。

很不幸,我无法处理“theano”模块(我的情况需要“pymc3”模块),我不得不修改.py文件并放弃部分应用程序。有没有人可以帮我构建一个带有“theano”模块的Windows 7+的.exe文件?


我建议每篇文章只提一个问题,否则很难将其标记为已回答。因此,对于这篇文章,让问题是:您使用cx_freeze或py2exe创建了一个可执行文件,在启动后什么也不做。我强烈建议包括py2execx_freeze标签,以便那些专家看到您的问题。删除executablepython-3.x标签,它们没有太多作用。此外,我怀疑它与纯Python库pyqtgraph无关。最好在单独的帖子中提出pyinstaller/pyqtgraph问题,并包括错误消息和适当的标签。 - titusjan
ok, I will do that, thank you - Stéphane
py2exe -- 似乎只与 Python 3.3 或更早版本兼容 -- 尽管我偶然发现了一个最近的 Python 3.6/3.7 移植版,但仍处于测试阶段。 - Dennis Jensen
1个回答

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

接下来,要将您的Python程序创建为一个可执行文件,请按照以下步骤操作:首先,进入您的程序路径(使用cd),即您的Python(.py)文件所在的位置,然后执行以下操作:

pyinstaller -w -F YourPyFile

当尝试编译Python 3.7、PyQtGraph和Python-Qt的组合时,这当然在Windows上无法工作——因为PyQtGraph会破坏最终的可执行文件,似乎无法处理PyQtGraph。我最近刚刚测试过这一点。 - Dennis Jensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接