Python 3.1.2 + снежный барс + lxml + XMLSchema - PullRequest
1 голос
/ 07 июля 2010

Я бы хотел использовать библиотеку lxml для проверки XML-схем в Python 3.1.2.

Поскольку ОС 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, но в консоли появилось много сообщений об ошибках. Установка lxml с помощью easy_install lxml имела тот же эффект.

В качестве последнего средства я попытался просто переместить содержимое каталога site-packages распространения 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+

Как подсказал Нед Дейли, я сделал следующее:

$ 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 ]

1 голос
/ 07 июля 2010

Если вы собираетесь собирать lxml из исходного кода, вам нужно собрать его полностью с нужным Python.И, в общем, вы не можете просто переместить пакеты сайтов из одного экземпляра Python в другой, особенно Python 2 против Python 3. Во-первых, отмените любое копирование или перемещение, которое вы сделали, в каталог пакетов сайтов Python 3.Если вы не уверены в том, что вы сделали, вам следует подумать о переустановке Python 3.1.Теперь начните с чистой копии исходного кода lxml из файла tar и попробуйте собрать его с помощью 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 созданы для работы в нескольких версиях OS X, поэтому они используют дополнительный 10.4 SDK.Установщик Apple Xcode для 10.6 Snow Leopard включает в себя 10.4u SDK, но по умолчанию он не установлен.Вам необходимо установить его с помощью установщика Xcode (на DVD-диске Snow Leopard или на новом Mac или загруженном с Apple Developer Connection).

0 голосов
/ 04 июля 2011

У меня также были проблемы с установкой lxml на Mac, но у меня это сработало:

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