Python 3.1.2 + снежный барс + lxml + XMLSchema

1

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

Поскольку ОС Mac OS Snow Leopard поставляется с установленным 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 имела тот же эффект.

В крайнем случае я попробовал просто переместить содержимое каталога пакетов-дистрибутивов Python 2.6 в каталог дистрибутива пакетов Python 3.1 и запустить тестовый script следующим образом:

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?

Спасибо заранее.

Теги:
python-3.x
xsd
lxml
osx-snow-leopard

2 ответа

1
Лучший ответ

Если вы собираетесь создавать lxml из исходного кода, вам нужно полностью его создать с помощью желаемого Python. И, в общем, вы не можете просто переместить пакеты сайтов из одного экземпляра Python в другой, особенно Python 2 vs 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

Если вы получаете ошибки, обновите свой вопрос, чтобы показать, какие сообщения об ошибках появляются.

EDIT: соответствующее сообщение об ошибке:

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
    Привет Нед, ценю твой ответ. Я отредактирую вопрос, показывая сообщение об ошибке.
  • 0
    Ах, смотрите отредактированный ответ выше.
Показать ещё 1 комментарий
0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню