【问题标题】:py2exe cannot import from six.pypy2exe 无法从 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 的问题?

标签: python py2exe six-python


【解决方案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 并成功运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 2017-07-13
      • 1970-01-01
      • 2016-04-10
      相关资源
      最近更新 更多