2014-01-16 2 views
2

Моя цель - создать скрипт python, который перебирает ячейки документа excel. Это мой скрипт python под названием reader.py, и он работает отлично.Ошибка при создании exe с py2exe и скриптом, импортирующим xlrd

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

Я вроде в тупике здесь. Любая помощь или руководство очень ценят.

Просто некоторая информация. Я запускаю Python 2.6 на 32-битной системе.

+0

как раз в стороне, у меня было много удачи с pyinstaller для создания исполняемых файлов Windows ... –

+0

Установили ли вы стороннюю версию etree (которая обычно более новая, чем в stdlib, поэтому некоторые модули/программы пытаются импортировать ее, если это возможно)? Я считаю, что он называется 'elementtree' ([пакет, в который он входит] (https://pypi.python.org/pypi/elementtree/) определенно есть), в отличие от' xml.etree' stdlib. – abarnert

+0

Также, пожалуйста, покажите нам всю трассировку, а не только строку ошибки. И скажите нам, когда вы это сделаете, построив bdist? установка? запуск установленной версии? – abarnert

ответ

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, прежде чем использовать его, чтобы заставить его работать. (И вам также может потребоваться указать его вручную как зависимость.)

Вы, вероятно, не хотите менять все сторонние модули, которые используете ... но я считаю, что перед тем, как импортировать любую из эти сторонние модули работают нормально.

Смежные вопросы