【问题标题】:Py2Exe "Missing Modules"Py2Exe“缺少模块”
【发布时间】:2015-01-08 14:46:32
【问题描述】:

我正在尝试使用 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。

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

【问题讨论】:

  • 项目是否在windows下运行?
  • 肯定的。 Windows XP cmd 中的 python redstring.py 完全没有任何问题。
  • 好吧,如果你的意思是使用 py2exe 选项 'include': 'platform',是的,虽然它没有抛出任何错误,但它也没有解决问题。

标签: python python-3.x gtk py2exe


【解决方案1】:

win32api 和 win32con 是 Mark Hammond 的 Python Windows 扩展(又名 pywin32)的一部分。 readline 是一些与控制台交互的代码使用(如果存在)的模块。

readline 和 pywin32 都是可选模块/包,它们不是绝对必需的,但会在存在时使用。

总而言之 - py2exe 注意到这些模块/包被一些代码引用,这些代码将包含在您的 exe 中(它甚至提到引用这些模块/包的模块:cmd、代码、pdb、平台)。 我希望您已经测试了您的脚本 - 以“未编译”形式,如果它工作正常,那么您可以放心地忽略这些消息:它们只是警告。

没有构建可执行文件的原因是 setup() 调用中缺少行 'console=["redstring"]' 或 'windows=["redstring"]'。

【讨论】:

  • 我已经彻底测试过了——脚本根本不需要这些,但是,除非有它们,否则 py2exe 不会创建可执行文件。
  • 啊,现在我看到了问题:您在 setup() 函数调用中缺少 'console=["redstring"]' 行。这指定了您要创建的可执行文件。
  • 是的,我后来也发现了。接得好。在我的情况下,这需要是'windows = [“redstring”]',因为这是GUI,但是是的。如果您编辑您的答案(因为,是的,它适用于脚本编译,但我省略了该行,所以没有可执行文件),我会接受答案。
【解决方案2】:

因此,这些库可能一开始就没有安装。 Python可能是“包括电池”,但不是这个程度。但是,我之所以回答这个问题,是因为对某些人(包括我自己)来说,修复它并不是世界上最显而易见的事情。

您需要从Sourceforge 安装 win32api(或正式名称为 pywin32)(目前,浏览文件以获取最新版本,因为下载按钮链接到 README.txt)这会将 win32con 解析为好吧。 (很遗憾,您目前无法从 pip 安装 pywin32。)

readline is not compatible with Windows,但它要求它。您实际上必须安装 pyreadline,这是最简单的 pip install pyreadline

这应该可以解决 py2exe 的所有这些问题。我仍然有麻烦,但这是不同的麻烦,所以这是一个不同的问题。

【讨论】:

  • 其实我打印的是“Hello world”,转换成.exe后如何检查是否打印,说明我的转换工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多