Py2Exe“缺失模块”

11

我正在尝试使用Py2Exe将我的Python项目转换为exe。值得注意的是,cx_freeze也抱怨缺少相同的三个“缺失模块”,以及几十个其他的模块。问题在于,没有任何地方告诉如何解决这个问题。

我正在MS Windows XP 32位(VirtualBox)上进行构建。

C:\Documents and Settings\Jason\Desktop\redstring2>python setup.py py2exe
running py2exe
running build_py
creating build
creating build\lib
copying redstring.py -> build\lib

  3 missing Modules
  ------------------
? readline                            imported from cmd, code, pdb
? win32api                            imported from platform
? win32con                            imported from platform
Building shared code archive 'dist\library.zip'.
Copy c:\windows\system32\python34.dll to dist
Copy C:\Python34\DLLs\select.pyd to dist\select.pyd
Copy C:\Python34\DLLs\_ssl.pyd to dist\_ssl.pyd
Copy C:\Python34\DLLs\_ctypes.pyd to dist\_ctypes.pyd
Copy C:\Python34\DLLs\_lzma.pyd to dist\_lzma.pyd
Copy C:\Python34\DLLs\_hashlib.pyd to dist\_hashlib.pyd
Copy C:\Python34\DLLs\pyexpat.pyd to dist\pyexpat.pyd
Copy C:\Python34\DLLs\_socket.pyd to dist\_socket.pyd
Copy C:\Python34\DLLs\_bz2.pyd to dist\_bz2.pyd
Copy C:\Python34\DLLs\unicodedata.pyd to dist\unicodedata.pyd

我的setup.py如下所示。

#!/usr/bin/python python

from setuptools import setup
import py2exe

setup(name="Redstring",
    version="2.0",
    description="REDundant STRING generator",
    author="MousePaw Labs",
    url="http://www.mousepawgames.com/",
    author_email="info@mousepawgames.com",
    data_files=[("", ["redstring.png", "redstring_interface.glade"])],
    py_modules=["redstring"],
    )

这是一个使用GTK+ 3(在Glade中构建)的Python 3.4项目。它在Ubuntu上运行得非常好,从python redstring.py也可以运行,但我无法将其编译成.exe文件。

到目前为止,我尝试了import platformfrom platform import win32api以及在redstring.pysetup.py中的所有类似操作,还通过在安装文件中的py2exe选项导入平台。


该项目在Windows下运行吗? - Eric
肯定的。在Windows XP命令提示符中运行python redstring.py没有任何问题。 - CodeMouse92
你尝试过这个吗:https://dev59.com/hWLVa4cB1Zd3GeqPxYw_? - Eric
如果你是指使用py2exe选项'include': 'platform',那么虽然它没有抛出任何错误,但也没有解决问题。 - CodeMouse92
2个回答

10

win32api和win32con是马克·哈蒙德的Python Windows扩展(又名pywin32)的一部分。readline是一个模块,如果存在,则被某些与控制台交互的代码使用。

无论如何,readline和pywin32都是可选的模块/包,不是必需的,但在存在时将被使用。

总的来说,py2exe注意到这些模块/包被一些代码引用,该代码将被包含进您的exe中(它甚至提到了引用这些模块/包的模块:cmd、code、pdb、platform)。 我希望您已经测试过您的脚本 - 如果以'未编译'的形式可以正常工作,那么您可以安全地忽略这些消息:它们仅是警告。

没有生成可执行文件的原因是setup()调用中缺少“console = ['redstring']”或“windows = ['redstring']”这行。


我已经进行了彻底的测试 - 脚本根本不需要这些,但是如果没有它们,py2exe将无法创建可执行文件。 - CodeMouse92
1
啊,现在我明白问题所在了:你在setup()函数调用中漏掉了'console=["redstring"]'这一行。这指定了你想要创建的可执行文件。 - theller
是的,我后来也发现了。很好的发现。在我的情况下,由于这是GUI,所以需要写成'windows=["redstring"]'。如果您编辑您的答案(因为它确实可以在脚本编译时工作,但我省略了那一行,所以没有可执行文件),我会接受这个答案。 - CodeMouse92

8
因此,可能从一开始就没有安装这些库。Python可能是“内置电池”,但不会到这种程度。然而,我回答这个问题是因为对于某些人(包括我自己),修复它并不是最明显的事情。
您需要从Sourceforge安装win32api(或正式称为pywin32)(目前,请浏览最新版本的文件,因为Download按钮链接到README.txt)。这也将解决win32con。 (很遗憾,您目前不能从pip安装pywin32。) readline与Windows不兼容,但它确实需要。您实际上需要安装pyreadline,最简单的方法是通过pip install pyreadline
这应该解决所有关于py2exe的问题。我仍然有麻烦,但那是另一个问题。

实际上,我正在打印类似于“Hello world”的内容,我该如何在转换为.exe后检查它是否正在打印,也就是说我的转换是否正常工作。 - Piyush S. Wanare

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