Установка lxml с python на Mac

Сначала я установил lxml без использования pip (Python 2.7.2 в Mac OS 10.6.8). Затем я прочитал этот пост и я снова установил его, используя pip (sudo pip install lxml). У меня все еще была проблема:

Я могу импортировать lxml (import lxml), но не могу использовать from lxml import etree. У меня есть это сообщение об ошибке:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/lxml-2.3.3-py2.7-macosx-10.6-intel.egg/lxml/etree.so, 2): Symbol not found: _htmlParseChunk
  Referenced from: /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/lxml-2.3.3-py2.7-macosx-10.6-intel.egg/lxml/etree.so
  Expected in: flat namespace
 in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/lxml-2.3.3-py2.7-macosx-10.6-intel.egg/lxml/etree.so

Затем я попытался установить lxml из исходного кода, следуя этим инструкциям. , и у меня есть это сообщение об ошибке:

checking whether we are cross compiling... configure: error: in `/Users/my_name/Applications/lxml/lxml-2.2.2/build/tmp/libxml2-2.7.8':
configure: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.
See `config.log' for more details
Traceback (most recent call last):
  File "setup.py", line 115, in <module>
    STATIC_CFLAGS, STATIC_BINARIES),
  File "/Users/my_name/Applications/lxml/lxml-2.2.2/setupinfo.py", line 50, in ext_modules
    libxslt_version=OPTION_LIBXSLT_VERSION)
  File "/Users/my_name/Applications/lxml/lxml-2.2.2/buildlibxml.py", line 198, in build_libxml2xslt
    call_subprocess(configure_cmd, cwd=libxml2_dir, **call_setup)
  File "/Users/my_name/Applications/lxml/lxml-2.2.2/buildlibxml.py", line 158, in call_subprocess
    raise Exception('Command "%s" returned code %s' % (cmd_desc, returncode))
Exception: Command "./configure --without-python --disable-dependency-tracking --disable-shared --prefix=/Users/my_name/Applications/lxml/lxml-2.2.2/build/tmp/libxml2" returned code 1

Наконец, я последовал второму совету этого ответа и использовал командную строку sudo STATIC_DEPS=true /usr/bin/easy_install-2.7 lxml. Он установил lxml в системе Python 2.7, поставляемой Apple, а не в той версии, которую я сейчас использую. Положительный момент: если я запускаю Apple-Python, я могу from lxml import etree.

Отрицательный момент: я до сих пор не знаю, как установить lxml на другую версию python. Есть идеи?

В настоящее время я использую /Library/Frameworks/Python.framework/Versions/2.7/bin/python.


person Antonin    schedule 24.03.2012    source источник
comment
возможный дубликат Нужна помощь в установке lxml на os x 10.7   -  person mechanical_meat    schedule 25.03.2012
comment
другая версия OSX в этом вопросе, но, возможно, этого достаточно, чтобы вы начали   -  person mechanical_meat    schedule 25.03.2012
comment
К сожалению, сборка lxml из исходников не работает.   -  person Antonin    schedule 25.03.2012


Ответы (1)


Вам нужно установить отдельный easy_install для версии Python, которую вы используете. Подробнее см. ответ здесь. Затем вы можете запустить команду easy_install, используя ее:

STATIC_DEPS=true easy_install-2.7 lxml

ОБНОВЛЕНИЕ: Из ваших комментариев вы теперь сообщаете об ошибке разрешения, показывающей еще один путь Python, который, по-видимому, является установленным MacPorts Python: /opt/local/Library/Frameworks. Вам нужно выяснить, какой Python вы хотите использовать. Если на самом деле вы хотите использовать порт MacPorts, просто установите предоставленный MacPorts порт lxml. Это самое простое решение.

$ sudo port selfupdate
$ sudo port install py27-lxml

В противном случае вам нужно установить easy_install с другим (python.org?) Python 2.7.2. Я бы рекомендовал использовать Distribute, более современную вилку `setuptools', и вам необходимо убедиться, вы используете правильный Python:

$ curl -O http://python-distribute.org/distribute_setup.py
$ export PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
$ which python2.7   # should be in the path above
$ python2.7 distribute_setup.py
$ STATIC_DEPS=true easy_install-2.7 lxml
person Ned Deily    schedule 25.03.2012
comment
Итак, сначала я установил easy_install с помощью sh setuptools-0.6c11-py2.7.egg (после загрузки яйца здесь, затем я изменил свой path (export PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"), и, наконец, я установил lxml (STATIC_DEPS=true easy_install-2.7 lxml). Все еще есть проблема с этой последней командой: error: can't create or remove files in install directory - person Antonin; 25.03.2012
comment
Кстати, а какая разница с STATIC_DEPS=true easy_install lxml? (без -2,7) - person Antonin; 25.03.2012
comment
Смотрите обновленный ответ. Инструменты распространения и установки устанавливают как неверсионную (easy_install), так и версионную (easy_install-2.7) копии команды. В конкретном экземпляре Python они должны давать одинаковые результаты. - person Ned Deily; 25.03.2012
comment
@Antonin: добавленный -2.7 относится к определенной версии easy_install, поскольку у вас установлено несколько python. Я действительно хочу выбросить это, если вы используете macports ... Я рекомендую полностью удалить его и перейти на Homebrew. - person jdi; 25.03.2012
comment
Большое спасибо за этот очень полный ответ, очень полезный. К сожалению, я попытался установить lxml с MacPorts на правильную версию Python, и у меня все еще появляется то же сообщение об ошибке при импорте etree из lxml. - person Antonin; 26.03.2012
comment
При использовании STATIC_DEPS=true easy_install-2.7 lxml у меня есть: Searching for lxml Best match: lxml 2.3.3 Processing lxml-2.3.3-py2.7-macosx-10.6-intel.egg lxml 2.3.3 is already the active version in easy-install.pth - person Antonin; 26.03.2012
comment
А когда python2.7 distribute_setup.py, у меня: /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info already exists (в самом конце) - person Antonin; 26.03.2012
comment
Но все же, когда which python2.7-инг, у меня /Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 - person Antonin; 26.03.2012
comment
Думаю, у меня слишком много версий Python на моей машине, и все они установлены по-разному. Я должен убрать весь этот бардак, но боюсь, что тогда возникнут еще большие проблемы. - person Antonin; 26.03.2012
comment
@jdi: Выбрасывать MacPorts и добавлять сюда Homwbrew — не очень полезное предложение. Проблема здесь не в MacPorts, а в путанице в отношении того, какой из трех разных Python, о которых сообщил OP, фактически используется для установки lxml. @Antonin: выберите один Python и придерживайтесь его. Очень сложно сказать, что происходит, имея так мало информации. Используйте which easy_install, чтобы убедиться, что вы используете тот, который вы собираетесь использовать. Затем используйте easy_install -m lxml и удалите сообщенные файлы / каталоги яйца, а затем повторите попытку установки. Или просто используйте MacPorts, как было предложено. - person Ned Deily; 26.03.2012
comment
@Antonin: Если вы не возражаете против потери каких-либо пакетов сайта, которые вы уже установили, вы можете просто зайти в /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ и вручную удалить там файлы и каталоги, затем снова начать с установки Distribute, а затем lxml. Вы также можете проверить и, при необходимости, отредактировать файл профиля оболочки (скорее всего, $HOME/.bash_profile), чтобы убедиться, что ожидаемый каталог bin фреймворка Python стоит первым в вашем PATH. Удачи! - person Ned Deily; 26.03.2012