在使用py2exe和脚本导入xlrd创建exe时遇到问题

时间:2014-01-16 23:32:45

标签: python py2exe xlrd

我的目标是创建一个循环遍历excel文档单元格的python脚本。这是我的python脚本reader.py,它运行得很好。

    import xlrd
    import os

    exceldoc = raw_input("Enter the path to the doc [C:\\folder\\file.xlsx]: ")

    wb = xlrd.open_workbook(exceldoc,'rb')
.... some code....

我遇到的问题是尝试使用py2exe创建可执行文件,因此可以在其他地方使用此脚本。

这是我的setup.py文件:

from distutils.core import setup
import py2exe
import sys
from glob import glob

setup(name='Excel Document Checker',console=['reader.py'])

我运行以下命令:python setup.py py2exe

似乎运行良好;它会创建包含dist文件的reader.exe文件夹,但在命令末尾附近我会得到以下内容:

The following modules appear to be missing
['cElementTree', 'elementtree.ElementTree']

我做了一些在线搜索,并尝试了这里的建议Re: Error: Element Tree not found,这改变了我的setup.py文件:

from distutils.core import setup
import py2exe
import sys

from glob import glob

options={
    "py2exe":{"unbuffered": True,"optimize": 2,
   'includes':['xml.etree.ElementPath', 'xml.etree.ElementTree', 'xml.etree.cElementTree'],
 "packages": ["elementtree", "xml"]}}

setup(name='Excel Document Checker',options = options,console=['reader.py'])

我现在收到一个错误: ImportError: No module named elementtree

我在这里陷入僵局。非常感谢任何帮助或指导。

只是一些信息 - 我在32位系统上运行Python 2.6。

1 个答案:

答案 0 :(得分:3)

您明确告诉setup.py依赖于此处名为elementtree的程序包:

"packages": ["elementtree", "xml"]}}

stdlib中没有这样的包。有xml.etree,但显然是同名。

您找到的示例显然是为安装了第三方软件包elementtree的人设计的,如果您需要在Python 2.6的xml.etree版本之后添加功能,或者如果您需要需要使用Python 1.5-2.4,但如果您只想使用Python 2.6的版本则不需要。 (无论如何,如果你需要第三方软件包......那么你必须安装它,否则它将不起作用。)

所以,不要这样做,那个错误就会消失。


此外,如果您的代码或您导入的代码(例如xlrd)正在使用xml.etree.cElementTree,那么,正如py2exe FAQ所述,您还必须import xml.etree.ElementTree在使用它之前让它工作。 (并且您可能还需要手动将其指定为依赖项。)

您可能不想更改您正在使用的所有第三方模块......但我相信在导入任何第三方模块之前确保import xml.etree.ElementTree可以正常工作。