py2exe 无法从 Six.py 导入
Posted
技术标签:
【中文标题】py2exe 无法从 Six.py 导入【英文标题】:py2exe cannot import from six.py 【发布时间】:2014-12-15 09:10:33 【问题描述】:我正在尝试在从 six.moves.urllib_parse
导入 urlparse
的程序上使用 py2exe。这是程序:
# 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'
。
如何阻止这些错误的发生?
【问题讨论】:
我会尝试在 py2exe 'packages' 选项中添加 'six' @Werner 这给出了错误:“TypeError: Six is not a package” 由于 py2exe 为特定的 python 版本创建了一个 exe,我决定替换我所有的六个实例。这样做为我解决了这个错误。 (但后来我遇到了其他导入错误) 糟糕,后来意识到这一点,我尝试将 'includes' 用于 'six',但也没有用。 @Humdinger,替换所有“六个”实例是什么意思?您是否升级到更新版本并解决了 py2exe 的问题? 【参考方案1】:问题只是py2exe没有检测到通过6个代理的模块,所以它们没有被捆绑。
您所要做的就是将相关模块(urlparse)添加到您的 setup.py 中:
options=
"py2exe":
...
"includes": ["urlparse"],
...
这样模块会被打包,当六个尝试导入它时,它会起作用。
【讨论】:
【参考方案2】:py2exe最近发布了一个新版本来解决这个问题:
Changes in version 0.9.2.2:
- Added support for six, cffi, pycparser, openssl.
使用这个版本,我能够创建一个 .exe 并成功运行。
【讨论】:
以上是关于py2exe 无法从 Six.py 导入的主要内容,如果未能解决你的问题,请参考以下文章