py2app и xml.etree.ElementTree - PullRequest
       11

py2app и xml.etree.ElementTree

2 голосов
/ 01 февраля 2010

Я пытаюсь создать приложение, которое использует некоторые данные xml, используя встроенный в Python класс xml.etree.ElementTree. Он работает правильно, когда я запускаю из командной строки, но при сборке я получаю ошибку «ImportError: No module etree.ElementTree». Я предполагаю, что это потому, что я не импортирую этот модуль правильно, но я не смог понять, как. Когда я использую директиву "includes" или "пакеты", py2app выдает ошибку с той же ошибкой, а когда я специально указываю каталог_пакета (/ System / Library / ...), он компилируется, но все равно выдает ошибку Я включил короткий пример, чтобы проиллюстрировать проблему.

macxml.py

from xml.etree.ElementTree import ElementTree

if __name__ == '__main__':
    tree = ElementTree()
    print tree.parse('lib.xml')

Это должно распечатать "<Элемент библиотеки в xxxxxx>", где библиотека является корневым именем.

setup.py

from setuptools import setup

setup(name="Mac XML Test",
      app=['macxml.py'],
     )

Как правильно заставить приложение mac использовать эту библиотеку?

Python 2.6.4

Mac OS X 10.6.2

Редактировать: я также пробовал это на другом Mac (PPC 10.5.8) с Python 2.6.2 и добился тех же результатов.

Ответы [ 3 ]

1 голос
/ 02 февраля 2010

После переустановки и обновления macholib, modulegraph, py2app и setuptools безрезультатно, я немного покопался и обнаружил следующую ошибку в модуле modulegraph:

graphmodule.find_modules.find_modules(includes=['xml.etree'])
Traceback (most recent call last):
    File "<stdin>", line 1 in <module>
    File ".../modulegraph/find_modules.py", line 255 in find_modules
    File ".../modulegraph/find_modules.py", line 182 in find_needed_modules
    File ".../modulegraph/modulegraph.py", line 401 in import_hook
    File ".../modulegraph/modulegraph.py", line 464 in load_tail
ImportError: No module named xml.etree

Итак, я больше изучил функции load_tail и import_hook и обнаружил, что по какой-то причине он правильно импортировал пакет xml, но затем пошел к старой установке _xmlplus, чтобы найти подпакет etree (который, конечно это не могло найти). Удаление пакета _xmlplus устранило ошибку, и я смог заставить приложение работать со следующим файлом setup.py:

from setuptools import setup
import xml.etree.ElementTree

setup(name="Mac XML Test",
      app=['macxml.py'],
      options={'py2app': {'includes': ['xml.etree.ElementTree']}},
      data_files=[('', ['lib.xml'])]
     )

Вывод отображается в консоли.

1 голос
/ 07 января 2011

Поскольку комментарий не имеет хорошего форматирования,

В find_modules.py я изменил

REPLACEPACKAGES = {
    '_xmlplus':     'xml',
}

К

REPLACEPACKAGES = {
    #'_xmlplus':     'xml',
}

И импорт xml сработал.

0 голосов
/ 01 февраля 2010

Если вы используете macports (или fink и т. Д.), Убедитесь, что py2app использует правильный интерпретатор. Возможно, вам придется установить новую версию для работы с 2.6.x (в OS X 10.5, py2app использует 2.4.x).

Если это не сработает, мои шаги для решения проблем с путями:

  1. Запустите интерпретатор Python, который использует ваш код (или py2app) (вы абсолютно уверены ?? попробовать which python)
  2. import sys; print sys.path

Если шаг 2. дает вам путь в /System/Library..someotherpythonversion, ваш код выполняется в неверном интерпретаторе.

...