在使用Windows 7 x64编译py2exe时出现问题

7

我正在使用 py2exe 将我的脚本编译成一个可在 Windows 上运行的 exe 文件,但是由于我的操作系统是 Windows 7 x64,因此遇到了错误。 我正在使用以下脚本在 cmd 中运行 execmaker.py py2exe

from distutils.core import setup
import py2exe

includes = []
excludes = ['_gtkagg', '_tkagg', 'bsddb', 'curses', 'email', 'pywin.debugger',
            'pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl',
            'Tkconstants', 'Tkinter']
packages = []
dll_excludes = ['libgdk-win32-2.0-0.dll', 'libgobject-2.0-0.dll', 'tcl84.dll',
                'tk84.dll']

setup(
    options = {"py2exe": {"compressed": 2, 
                          "optimize": 2,
                          "includes": includes,
                          "excludes": excludes,
                          "packages": packages,
                          "dll_excludes": dll_excludes,
                          "bundle_files": 1,
                          "dist_dir": "dist",
                          "xref": False,
                          "skip_archive": False,
                          "ascii": False,
                          "custom_boot_script": '',
                         }
              },
    windows=['My_Script.py'] #this is the name of the script I'm compiling to exe
)

重点不是我要编译成exe的实际脚本,因为当我使用 bundle_files: 3 编译时,完全没有问题,这不会将任何文件捆绑在一起,而是在一个文件夹中留下约200个 .pyo 文件。

让我们来解决问题吧:我正在使用 Win 7 x64,安装的是 Python 2.7.5 的 64 位版本。当我 cdexecmaker.pyMy_Script.py 文件所在的目录并在 cmd 中运行它 (execmaker.py py2exe) 时,我收到了以下错误信息:

error: bundle-files 1 is not yet supported on win64,我理解为它不会捆绑文件,因为我的操作系统是 64 位。我认为这可能是因为我安装了 64 位 python 引起的问题,但是当我卸载它时,我收到了错误信息:DLL load failed: %1 is not a valid Win32 application.

导致 DLL 装入错误的原因是在 64 位 Windows 上运行 32 位 python。所以基本上,无论是 32 位还是 64 位 python 都无法工作,因为我正在运行 64 位 Windows。是否有解决办法,或者我需要在 32 位机器上安装 python 和所有我一直在使用的模块来进行编译?

编辑:我进行了更多的研究,并没有任何结果。目前,除非这个问题得到更有效的解答,否则我想在一个分区或通过 Parallels(这是我做的方式)上安装一个 32 位操作系统。


1
我宁愿有一个精心思考的非常长的问题,也不愿看到其他一些毫无意义的东西出现在这里(比如,“我的400行函数有一个错误”,但没有说明错误,并发布了一段完全不相关的代码)。我只希望我能帮助你 :-) - paxdiablo
我很感激你的好意!我的大多数之前的问题都很糟糕,所以听到这个问题可能不那么糟糕真是太棒了。 - Ian Zane
尝试运行 python execmaker.py py2exe 。我发现有时候其他 Python 脚本的结果在显式调用解释器和让 Windows 的文件关联处理之间存在差异。 - martineau
我遇到了同样的问题,通过在Windows上重新安装32位Python和32位Py2exe来解决它。 - Hong
5个回答

5
我想现在对你来说可能已经太晚了,但是对于下一个陷入困境的人,我认为更有效的方法是从Oracle免费安装VirtualBox(VB),然后在其上安装32位操作系统。这样,您无需分区硬盘或做任何其他操作,而且您可以像卸载任何其他程序一样没有任何风险地卸载VB。
另一个选择是尝试使用PyInstaller。我只用过它来制作适用于Linux系统的可执行文件,但我认为您也可以在Windows上使用它。

4
我有一个和OP类似的问题。在64位Windows 7 Python2.7环境下,使用Py2exe捆绑的Python应用程序在32位W7下运行了一段时间后,早在2013年8月初仍然正常工作。但是到11月下旬发现由于版本冲突而停止工作。我最好的猜测是在这些日期之间的Windows更新引起了更严格的版本检查。
我在我的旧32位Vista Python27开发机上重新使用Py2Exe打包了应用程序,然后它再次工作,在64位和32位Windows下都适用。
这个答案(来自这里)对我最有帮助:
“最简单的方法是确保你的64位Windows安装正在使用32位Python安装。 py2exe实际上并不构建任何东西; 它只是将您的源文件与Python解释器捆绑在一起,因此只要该解释器是32位的,生成的exe就应该能在任何平台上运行。”
为了完整起见,这是错误消息:
“This version of [module name] is not compatible with the version of Windows you're running. Check your computer's system information to see whether you need a x86 (32-bit) or x64 (64-bit) version of the program, and then contact the software publisher.”

2

我也在Windows 7上运行该应用程序。如果可以的话,请卸载Python 2.7 x64,重新安装Python 2.7 x86,最后安装py2exe。这对我解决了问题。


0

有一个在线exe生成器工具(py2exe.net),对我来说“几乎”有效。我正在使用Python 2.7进行编程,当尝试获取独立可执行文件时,遇到了令人恼火的Windows 64位问题。

即使该网站提到它是为Python 3.x程序构建的,我还是上传了我的程序以进行尝试。

我的程序使用pygame调用png图像,因此我也在网站上导入了这些图像。

我得到了一个几乎独立的可执行文件:显然图像导入没有起作用,因为可执行文件只能在包含图像的文件夹中运行。但是,这比没有好多了。


-2
你的问题是py2exe是32位版本,无法在x64 Windows上工作。 如果是这种情况,显然你需要64位的py2exe,它在sf.net上

我相信我已经在运行64位的py2exe,但为了确保,我下载了那个文件并运行了它。问题没有解决。我仍然收到与之前相同的错误消息(原帖中提到的错误消息)。 - ArtOfWarfare

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