py2exe无法从six.py导入
我正在尝试在一个程序中使用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文件并顺利运行了它。