我一直在尝试将 python 代码编译成单个 exe,但没有成功。
-
我尝试过 pyinstaller,这是 .spec 文件:
# -*- mode: python -*-
a = Analysis([os.path.join(HOMEPATH,'support\\_mountzlib.py'), os.path.join(HOMEPATH,'support\\useUnicode.py'), 'programs\\toolbox.py'],
pathex=['C:\\Users\\Ronaldo\\Desktop\\Python\\pyinstaller'])
pyz = PYZ(a.pure)
exe = EXE( pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name=os.path.join('dist', 'program.exe'),
debug=False,
strip=False,
upx=True,
console=False )
Pyinstaller 编译得很好,创建了一个可以工作的 exe 文件,
但显然其他用户没有相同版本
安装的 python (2.7.2) 无法运行它。没有给出任何错误,它只是不启动。我已经尝试通过发送
给几个朋友看了,也在虚拟机上试了一下。
-
尝试过 py2exe。当涉及到编译时(使用所有库
在它旁边,以及其余文件)它工作正常。我试过
将其编译为单个文件,但编译后的 exe 文件给了我一个“
toolbox.exe 已停止工作”错误。这是错误报告,
以防万一,可能有用:
Problem signature:
Problem Event Name: APPCRASH
Application Name: toolbox.exe
Application Version: 0.0.0.0
Application Timestamp: 49180193
Fault Module Name: StackHash_0a9e
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 00000000
Exception Code: c0000005
Exception Offset: 01b61fcb
OS Version: 6.1.7601.2.1.0.256.1
Locale ID: 1033
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789
setup.py 文件是:
from distutils.core import setup
import py2exe, sys, os
sys.argv.append('py2exe')
setup(
options = {'py2exe': {'bundle_files': 1}},
windows = [{'script': "toolbox.py"}],
zipfile = None,
) single.py file:
这是 single.py:
import os, sys, ctypes
ctypes.windll.user32.MessageBoxA(0,
"curdir: %s\nexedir: %s\nsys.winver: %s" % (
os.path.abspath(os.curdir),
os.path.abspath(os.path.dirname(sys.argv[0])),
sys.winver,
), "%s - Message" % os.path.basename(sys.executable), 0x30
)
我编写的程序使用 tkinter、sys、random 和 win32clipboard(pywin) 模块。
我究竟做错了什么?
还有其他更好的编译器吗?
更新:根据 Joël 的提示,我使用调试和控制台模式进行编译。对于没有 python 2.7 的用户来说仍然不起作用。这是错误消息:
C:\Users\XXXXX\Desktop>program.exe
Found embedded PKG: C:\Users\XXXXX\Desktop\program.exe
Extracting binaries
Setting up to run child
Setting magic environment var
Creating child process
Waiting for child process to finish...
Found embedded PKG: C:\Users\XXXXX\Desktop\program.exe
workpath: C:/Users/XXXXX/AppData/Local/Temp/_MEI14042/
manifestpath: C:/Users/XXXXX/AppData/Local/Temp/_MEI14042/program.exe.manifest
Activation context created
Activation context activated
C:\Users\XXXXX\AppData\Local\Temp\_MEI14042\python27.dll
Manipulating evironment
PYTHONPATH=C:/Users/XXXXX/AppData/Local/Temp/_MEI14042;C:/Users/XXXXX/Desktop
importing modules from CArchive
extracted iu
extracted struct
extracted archive
Installing import hooks
outPYZ1.pyz
我真的希望这对可能的答案有所帮助。
我的两分钱:你是否使用debug
的选项PyInstaller
?
只需更新您的规范文件:
exe = EXE( pyz,
[...]
debug=True,
[...])
(注意:为了避免出现大量消息框,您可能需要设置控制台输出:console=True
)
也许它会返回一些有用的数据。请向我们提供这种情况下的输出(如果有)。
根据你得到的输出,这是一个相当常见的问题,因为如果 PyInstaller 解析模块的依赖关系,依赖关系的依赖关系可能会被忘记。
就你而言,Tcl
缺少,而这是某些人需要的Tkinter
图书馆:你应该看看这里:Python、Pyinstaller 在 Windows 中创建快捷方式
根据文档:
详细说明 Makespec.py,这是支持的命令行: python Makespec.py [opts] [ ...] 其中允许的选项有:
[...]
-K, --tk 在部署中包含 TCL/TK。
你可以尝试一下这个说法,看看对你的影响spec
文件。我敢打赌这是分析或 EXE 函数中考虑的模块中的一个补充。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)