我的目标是创建一个循环遍历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。
答案 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
可以正常工作。