py2exe无法从six.py导入

1 投票
2 回答
1417 浏览
提问于 2025-04-28 13:02

我正在尝试在一个程序中使用py2exe,这个程序从 six.moves.urllib_parse 导入 urlparse。这是我的程序:

# hello.py
from six.moves.urllib_parse import urlparse
print('hello world')

这是我的setup.py文件:

from distutils.core import setup
import py2exe
setup(console=['hello.py'])

运行hello.py没有问题。当我用 python setup.py py2exe 把hello.py编译成exe文件时,生成了一个 hello.exe 文件。然而,当我运行 hello.exe 时,出现了一个错误,提示:

ImportError: No module named urlparse

我使用的是Python 2.7。

在Python 3.4中,当我运行 python setup.py py2exe 时,出现了一个错误,提示 KeyError: 'six.moves'

我该如何解决这些错误呢?

暂无标签

2 个回答

1

问题在于,py2exe没有检测到通过six这个库代理的模块,所以这些模块没有被打包。

你只需要在你的setup.py文件中,把相关的模块(urlparse)添加到包含的列表里:

  options={
      "py2exe": {
      ...
      "includes": ["urlparse"],
      ...

这样一来,这个模块就会被打包,当six尝试导入它时,就能正常工作了。

0

最近,py2exe发布了一个新版本,解决了这个问题:

Changes in version 0.9.2.2:
- Added support for six, cffi, pycparser, openssl.

使用这个版本,我成功地创建了一个.exe文件并顺利运行了它。

撰写回答