将python代码编译为单个exe

我一直在尝试将
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

我真的希望这可以作为可能答案的帮助.

最佳答案 我的两分钱:你是否使用PyInstaller的调试选项进行了测试?

只需更新您的specfile:

exe = EXE( pyz,
           [...]
           debug=True,
           [...])

(注意:为了避免大量的消息框,您可能需要设置控制台输出:console = True)

也许它会返回一些有用的数据.在这种情况下,请提供输出(如果有的话).

根据你得到的输出,这是一个非常常见的问题,因为如果PyInstaller解析了模块的依赖关系,可能会忘记依赖关系的依赖关系.

在你的情况下,缺少Tcl,这是一些Tkinter库所需要的:你应该看看这里:Python, Pyinstaller creating shortcuts in windows

根据文件:

Elaborating on Makespec.py, this is the supported command line: python Makespec.py [opts] [ …] Where allowed OPTIONS are:

[…]

-K, –tk include TCL/TK in the deployment.

您可以尝试使用此参数,并检查对spec文件的影响.我敢打赌,这是在Analysis或EXE功能中考虑的模块中的一个补充.

点赞