Python 3.1.2 + 雪豹 + lxml + XMLSchema
我想在Python 3.1.2中使用lxml库来验证XML模式。
因为Snow Leopard MAC OS自带Python 2.6.1,所以我首先下载了Python 3.1.2的自动安装程序,地址是http://www.python.org/ftp/python/3.1.2/python-3.1.2-macosx10.3-2010-03-24.dmg,然后安装了它。
接着,我下载了lxml 2.2.6,地址是http://pypi.python.org/packages/source/l/lxml/lxml-2.2.6.tar.gz,解压后按照http://wiki.python.org/moin/CheeseShopTutorial上的说明进行了安装(也就是:)
$ cd lxml-2.2.6
$ python setup.py install
这个包在我的Python 2.6的安装目录(/Library/Python/2.6/site-packages)里安装得很顺利,但我希望它能安装在我的Python 3.1的目录(/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/site-packages)里。
我尝试把python setup.py install
替换成python3 setup.py install
,但是控制台里出现了很多错误信息。用easy_install lxml
安装lxml也出现了同样的问题。
最后,我试着直接把Python 2.6的安装目录里的内容移动到Python 3.1的安装目录,然后运行了一个测试脚本,像这样:
try:
from lxml import etree
print("running with lxml.etree")
except ImportError:
try:
# Python 2.5
import xml.etree.cElementTree as etree
print("running with cElementTree on Python 2.5+")
except ImportError:
try:
# Python 2.5
import xml.etree.ElementTree as etree
print("running with ElementTree on Python 2.5+")
except ImportError:
try:
# normal cElementTree install
import cElementTree as etree
print("running with cElementTree")
except ImportError:
try:
# normal ElementTree install
import elementtree.ElementTree as etree
print("running with ElementTree")
except ImportError:
print("Failed to import ElementTree from any known place")
schema_root = etree.parse('note.xsd').getroot()
schema = etree.XMLSchema(schema_root)
parser = etree.XMLParser(schema = schema)
root = etree.parse('note.xml', parser)
结果在控制台里出现了这个错误信息:
Traceback (most recent call last):
File "/Users/eduardo/Workspace/PythonToolbox/TestProject/src/testproject/domparse.py", line 97, in <module>
schema = etree.XMLSchema(schema_root)
AttributeError: 'module' object has no attribute 'XMLSchema'
running with cElementTree on Python 2.5+
根据Ned Deily的建议,我做了以下操作:
$ curl http://pypi.python.org/packages/source/l/lxml/lxml-2.2.6.tar.gz | tar xz
$ cd lxml-2.2.6
$ python3 setup.py install
但是我收到了几个编译错误信息,文件在http://www.educoelho.com/files/output.txt
我该如何让lxml在Python 3.1中运行呢?
提前谢谢你。
2 个回答
我在Mac上安装lxml的时候也遇到了一些问题,不过这个方法对我有效:
sudo env ARCHFLAGS="-arch i386 -arch x86_64" easy_install lxml
如果你打算从源代码构建lxml库,你需要用你想要的Python版本来完全构建它。一般来说,你不能简单地把一个Python环境中的site-packages文件夹里的内容移动到另一个Python环境中,尤其是Python 2和Python 3之间。首先,撤销你之前对Python 3的site-packages目录所做的任何复制或移动。如果你不确定自己做了什么,建议你重新安装Python 3.1。接下来,从tar文件中获取lxml的干净源代码副本,然后尝试用python3.1来构建它:
$ rm -r lxml-2.2.6
$ curl http://pypi.python.org/packages/source/l/lxml/lxml-2.2.6.tar.gz | tar xz
$ cd lxml-2.2.6
$ python3 setup.py install
如果出现错误,请更新你的问题,准确地显示出错误信息。
编辑:相关的错误信息是这个:
Compiling with an SDK that doesn't seem to exist: /Developer/SDKs/MacOSX10.4u.sdk
大多数从python.org下载的Python版本都是为了在多个OS X版本上运行,所以它们使用了可选的10.4 SDK。苹果的Xcode安装程序对于10.6 Snow Leopard版本包含了10.4u SDK,但默认情况下并没有安装。你需要通过Xcode安装程序来安装它(可以在Snow Leopard的DVD上找到,或者是新Mac附带的,或者从苹果开发者网站下载)。