我正在尝试使用Python的内置xml.etree.ElementTree类构建一个使用一些xml数据的应用程序。当我从命令行运行时,它正常工作,但是当我构建它时,我收到一个错误“ImportError:No module etree.ElementTree。”我猜这是因为我没有正确导入该模块,但我无法弄清楚如何。当我使用“includes”或“packages”指令时,py2app会抱怨同样的错误,当我专门指定package_dir(/ System / Library / ...)时,它会编译,但仍然会给我错误。我举了一个简短的例子来说明这个问题。
macxml.py
from xml.etree.ElementTree import ElementTree
if __name__ == '__main__':
tree = ElementTree()
print tree.parse('lib.xml')
这应打印出“< xxxxxx>元素库”其中Library是根名称。
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
编辑:我也尝试使用Python 2.6.2在另一个mac(PPC 10.5.8)上实现了这一点并获得了相同的结果。
答案 0 :(得分:1)
重新安装和更新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 :(得分:1)
由于评论没有良好的格式化,
在find_modules.py中我改变了
REPLACEPACKAGES = {
'_xmlplus': 'xml',
}
要
REPLACEPACKAGES = {
#'_xmlplus': 'xml',
}
xml导入工作正常。
答案 2 :(得分:0)
如果你正在使用macports(或fink等),请确保py2app
正在使用正确的解释器。您可能必须安装新版本才能使用2.6.x(在OS X 10.5上,py2app
使用2.4.x)。
如果这不起作用,我处理路径问题的步骤是:
py2app
)使用的python解释器(你绝对肯定吗?试试which python
)import sys; print sys.path
如果第2步为您提供/System/Library..someotherpythonversion
中的路径,则您的代码在错误的解释器中运行。