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 导入的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何解决使用 py2exe 产生的属性和导入错误?

我无法修复的 Pygame2Exe 错误

Python打包EXE神器 pyinstaller

如何使用 py2exe 和 esky 冻结 Celery?

无法从'@angular/forms'导入“导入FormGroup,FormControl [重复]

无法从 sklearn 导入 c