2010-07-07 61 views
1

我想在Python 3.1.2中使用lxml库来验证XML Schema。Python 3.1.2 + Snow Leopard + lxml + XMLSchema

由于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并安装它。

其次,我在http://pypi.python.org/packages/source/l/lxml/lxml-2.2.6.tar.gz下载LXML 2.2.6,解压,并在规定进行安装http://wiki.python.org/moin/CheeseShopTutorial(即:)

$ cd lxml-2.2.6 
    $ python setup.py install 

它与我的Python 2.6分发定点后患安装包packages目录(/Library/Python/2.6/site-packages),但是我想将它安装在我的Python 3.1发行版的站点包目录中(/Library/Frameworks/Python.framework/Versions/3.1/lib/python3 ·1 /站点包)。

我试图用python3 setup.py install替换python setup.py install,但是我在控制台中有很多错误消息。使用easy_install lxml安装lxml具有相同的效果。

作为最后的手段,我想简单地添加到Python 2.6分发site-packages目录的内容移动到了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+ 

正如斯内德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

我怎样才能获得在Python 3.1中运行lxml?

在此先感谢。

回答

1

如果您打算从源代码构建lxml,那么您需要使用所需的Python完全构建它。而且,通常,您不能只将站点包从一个Python实例移动到另一个实例,特别是Python 2 vs Python 3.首先,撤消您在Python 3站点包目录中执行的任何复制或移动操作。如果你不确定你做了什么,你应该考虑重新安装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蟒内置所以他们使用可选的10.4 SDK在OS X上的几个版本的工作。 Apple 10.6 Snow Leopard的Xcode安装程序包含10.4u SDK,但默认情况下未安装。您需要使用Xcode安装程序(在Snow Leopard DVD上或随附新的Mac或从Apple Developer Connection下载)进行安装。

+0

嘿斯内德,感谢您的答复。我将编辑显示错误消息的问题。 – 2010-07-07 19:18:52

+0

啊,看看上面编辑的答案。 – 2010-07-07 19:51:18

+0

谢谢Ned Deily!我下载了最新版本的SDK(xcode_3.2.3_and_iphone_sdk_4__final.dmg),并重新安装了标有MacOSX10.4u.sdk复选框的XCode/SDK(这不是默认设置)。现在我的/ Developer/SDKs目录也有MacOSX10.4u.sdk。我重复了你的安装步骤,现在lxml在Python 3.1.2中正常工作。谢谢! – 2010-07-07 22:34:53

0

我也有问题,在Mac上安装lxml的,但是这个工作对我来说:

sudo env ARCHFLAGS="-arch i386 -arch x86_64" easy_install lxml