我想为 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”文件(其中一个包含主文件,另一个包含一堆定义)和一个描述 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 行没有错误消息,直到最后),它创建了一个“build”目录,其中包含一个“exe.win-amd64-3.5”子目录,其中包含所需的所有内容+ .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 的新帖子:从使用 pyinstaller 导入 theano 的 python 3 脚本构建适用于 Windows 的 .exe https://stackoverflow.com/questions/45750676/build-a-exe-for-windows-from-a-python-3-script-importing-pyqtgraph-and-opening.
我邀请您回答 pyinstaller 的问题。如果我的问题通过 py2exe 或 cx_freeze 解决,这个问题将被标记为已回答。
9月2日下午2点更新:
经过多次尝试后,我最终成功地用 pyinstaller 构建了一个 .exe。
不幸的是,我未能处理“theano”模块(在我的情况下,“pymc3”模块需要该模块),我不得不修改 .py 文件并放弃部分应用程序。任何人都可以帮助我使用“theano”模块构建适用于 Windows 7+ 的 .exe 吗?