Установка lxml с python на Mac - PullRequest
3 голосов
/ 25 марта 2012

Сначала я установил 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.

1 Ответ

4 голосов
/ 25 марта 2012

Вам необходимо установить отдельную 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
...