2010-07-07 17 views
1

Je voudrais utiliser la bibliothèque lxml pour valider les schémas XML dans Python 3.1.2.Python 3.1.2 + Snow Leopard + lxml + XMLSchema

Puisque le système d'exploitation MAC Snow Leopard est livré avec le Python 2.6.1 installé, j'ai d'abord téléchargé le programme d'installation automatique Python 3.1.2 au http://www.python.org/ftp/python/3.1.2/python-3.1.2-macosx10.3-2010-03-24.dmg et l'ai installé.

Deuxièmement, je téléchargé lxml 2.2.6 à http://pypi.python.org/packages/source/l/lxml/lxml-2.2.6.tar.gz, décompressé et exécuté l'installation comme indiqué dans http://wiki.python.org/moin/CheeseShopTutorial (ie :)

$ cd lxml-2.2.6 
    $ python setup.py install 

Il a installé le paquet sans problèmes à ma distribution Python 2.6 site- le répertoire des paquets (/Library/Python/2.6/site-packages), mais je voudrais l'installer dans mon répertoire de paquets-sites de distribution Python 3.1 (/Library/Frameworks/Python.framework/Versions/3.1/lib/python3 .1/packages de sites). J'ai essayé de remplacer python setup.py install par python3 setup.py install, mais j'ai beaucoup de messages d'erreur dans la console. L'installation du fichier XML en utilisant easy_install lxml a eu le même effet.

En dernier recours, j'ai essayé simplement de déplacer le contenu de la distribution Python 2.6 site-packages vers le répertoire site-packages de distribution Python 3.1 et exécuter un script de test comme celui-ci:

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) 

Et J'ai reçu ce message d'erreur dans la console:

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+ 

Comme suggéré par Ned Deily, je l'ai fait ce qui suit:

$ 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 

Mais j'ai des messages d'erreur du compilateur, le fichier

Comment puis-je faire fonctionner lxml en Python 3.1?

Merci d'avance.

Répondre

1

Si vous voulez construire lxml depuis la source, vous devez le construire entièrement avec le Python désiré. Et, en général, vous ne pouvez pas simplement déplacer des packages de site d'une instance Python à une autre, en particulier Python 2 vs Python 3. Tout d'abord, annulez la copie ou le déplacement effectué dans le répertoire des packages de site Python 3. Si vous n'êtes pas sûr de ce que vous avez fait, vous devriez envisager de réinstaller Python 3.1. Maintenant, commencer par une copie propre de la source lxml à partir du fichier de goudron et essayer de construire avec 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 

Si vous obtenez des erreurs, mettez à jour votre question pour montrer apparaître exactement ce que les messages d'erreur.

EDIT: Le message d'erreur correspondant est celui-ci:

Compiling with an SDK that doesn't seem to exist: /Developer/SDKs/MacOSX10.4u.sdk 

La plupart des pythons de Python.org sont conçus pour fonctionner sur plusieurs versions de Mac OS X afin qu'ils utilisent le SDK 10.4 en option. L'installateur Xcode d'Apple pour 10.6 Snow Leopard inclut le SDK 10.4u mais il n'est pas installé par défaut. Vous devez l'installer à l'aide du programme d'installation de Xcode (sur le DVD Snow Leopard ou fourni avec un nouveau Mac ou téléchargé depuis Apple Developer Connection).

+0

Hey Ned, apprécier votre réponse. Je vais modifier la question montrant le message d'erreur. –

+0

Ah, voir la réponse éditée ci-dessus. –

+0

Merci Ned Deily! J'ai téléchargé la dernière version du SDK (xcode_3.2.3_and_iphone_sdk_4__final.dmg) et j'ai réinstallé le XCode/SDK avec la case à cocher MacOSX10.4u.sdk marquée (ce qui n'est pas le cas par défaut). Maintenant, mon répertoire/Developer/SDKs a également le MacOSX10.4u.sdk. J'ai répété vos étapes d'installation et maintenant lxml fonctionne correctement dans Python 3.1.2. Merci! –

0

J'ai eu aussi des problèmes à installer lxml sur Mac, mais cela a fonctionné pour moi:

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