Не удается установить Lxml на Mac OS X 10,9


234

Я хочу установить Lxml, чтобы потом установить Scrapy.

Когда я обновил свой Mac сегодня, он не позволил мне переустановить lxml, я получил следующую ошибку:

In file included from src/lxml/lxml.etree.c:314:
/private/tmp/pip_build_root/lxml/src/lxml/includes/etree_defs.h:9:10: fatal error: 'libxml/xmlversion.h' file not found
#include "libxml/xmlversion.h"
         ^
1 error generated.
error: command 'cc' failed with exit status 1

Я пытался использовать brew для установки libxml2 и libxslt, оба установились нормально, но я все еще не могу установить lxml.

В прошлый раз, когда я устанавливал, мне нужно было включить инструменты разработчика на XCode, но, поскольку он обновлен до XCode 5, он больше не дает мне такой возможности.

Кто-нибудь знает, что мне нужно делать?


3
PS: я рекомендую использовать: pip3.4 install lxmlили STATIC_DEPS=true pip3.4 install lxmlкоманды, если вы нацелены на конкретную установку для Python3 (адаптируйтесь к вашей версии, завершение bash TAB - ваш друг); так что вы устанавливаете для конкретной версии вашей целевой программы, которая использует эту / эти библиотеки. В противном случае легко потратить 30 минут на установку библиотеки для неправильного интерпретатора ;-)
Фил Л.

3
Обязательно отметьте правильный ответ как решение, чтобы другие могли использовать ваш вопрос в качестве руководства, если у них возникла та же проблема :)
Паркер

Ответы:


500

Вы должны установить или обновить инструмент командной строки для xcode. Попробуйте это в терминале:

xcode-select --install

24
Я получаю сообщение «Не удается установить программное обеспечение, поскольку оно в настоящее время недоступно на сервере обновления программного обеспечения».
Келорек

7
Стоит отметить, что вы, похоже, получаете сообщение «Не удается установить программное обеспечение, поскольку оно в настоящее время недоступно на сервере обновления программного обеспечения». когда инструменты уже установлены.
Вомбат

Несколько замечаний о том, как вручную проверить, установлены ли они, - stackoverflow.com/a/20834890/255961
studgeek,

1
Отлично работает на 10.10.3. Не уверен, почему другие должны манипулировать cflags.
Эрик Чен,

1
И работал у меня после обновления до El Capitan (10.11).
Лукаш

193

Я решил эту проблему на Yosemite, установив и установив ссылки libxml2и libxsltвыполнив brew:

brew install libxml2
brew install libxslt
brew link libxml2 --force
brew link libxslt --force

Если вы решили проблему с помощью этого метода, но позже он снова появляется, вам может потребоваться выполнить это до четырех строк выше:

brew unlink libxml2
brew unlink libxslt

Если у вас есть ошибки разрешения с Homebrew, особенно на El Capitan, это полезный документ . По сути, независимо от версии OS X, попробуйте запустить:

sudo chown -R $(whoami):admin /usr/local

24
Самый полезный ответ. Невероятно, как xcode-select получает так много голосов. Если вы используете brew, вы уже давно выбрали код или установили xcode.
Маркос Элизиарио Сантос

5
@ MarcosEliziárioSantos Слово «установить» xcode-select --installнемного вводит в заблуждение. Я обнаружил, что после обновления с Mavericks до Yosemite мне нужно было запустить xcode-select --installснова, чтобы перейти на инструменты командной строки Yosemite. Это (частично) решило проблемы, с которыми я сталкивался, и в любом случае было бы безопасно работать излишне.
Ноах Магедман

2
@ MarcosEliziárioSantos, вероятно, потому что верхний ответ решил проблему для большинства людей. Это решение работало как обходной путь, но через несколько секунд я столкнулся с похожими проблемами с libmemcache. Топ ответ исправил проблему. Каждый должен рассмотреть этот метод только после того, как попробуете лучший ответ.
Рафаль Эс

@ MarcosEliziárioSantos Еще одна вещь - я использую brew, но это была новая установка (у меня был установлен только XCode через AppStore, чего достаточно для установки homebrew).
Рафаль Эс

Кроме того, Homebrew всегда разрушает мои разрешения. Я использовал решение Xcode.
Судо

102

Вы можете решить свою проблему, запустив это в командной строке:

 STATIC_DEPS=true pip install lxml

Это точно помогло мне. Пояснения к документам


Огромное спасибо. Это сэкономило мне невероятное количество времени.
Lukecampbell

Отлично работает на OSX 10.9.5
user9869932

Спасибо!
Отлично

48

Я перепробовал большинство из приведенных выше решений, но ни одно из них не помогло мне. Я использую Yosemite 10.10, единственное решение, которое мне помогло, это набрать это в терминале:

sudo CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2 CFLAGS=-Qunused-arguments CPPFLAGS=-Qunused-arguments pip install lxml

РЕДАКТИРОВАТЬ: Если вы используете virtualenv, sudo в начале не требуется.


1
Это решение работает и на Mavericks! Если вы используете, virtualenvsudo не требуется.
Мауро Баральди

Мой все еще OSError: [Errno 1] Operation not permitted: '/usr/bin/build'выводит, несмотря на выполнение команды как sudo. Любые идеи?
PLPeeters

@PLPeeters Какую версию Python вы используете и какую версию ОС?
Робинс

Я нахожусь на бета-версии El Capitan (так что это 10.11) и использую Python 2.7 для этого. Я предполагаю, что это может иметь какое-то отношение к El Capitan ...
PLPeeters

Вы спасатель жизни. Эль капитан работает, в virtualenv нет необходимости в sudo. Спасибо!
Jacoor

24

Это также беспокоило меня некоторое время. Я недостаточно знаю внутреннюю информацию о python distutils и т. Д., Но путь включения здесь неверен. Я сделал следующий уродливый взлом, чтобы удержать меня, пока люди из Python lxml не смогут сделать правильное исправление.

sudo ln -s  /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2/libxml/ /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml

19

Установка глобально ... OS X 10.9.2

xcode-select --install
sudo easy_install pip
sudo CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2 CFLAGS=-Qunused-arguments CPPFLAGS=-Qunused-arguments pip install lxml

1
Это сработало для меня, пришлось сначала обновить инструменты разработчика xcode, используя: xcode-select
--install

Это добилось цели. У меня уже были установлены инструменты командной строки xcode, но, похоже, их нужно было обновить.
Стивен Меркатанте

12

Инструкции по установке на http://lxml.de/installation.html объясняют:

Чтобы ускорить сборку в тестовых средах, например, на сервере непрерывной интеграции, отключите оптимизацию компилятора C, установив переменную среды CFLAGS:

CFLAGS="-O0" pip install lxml

Работал безупречно для меня. +1
Жоау Перейра

11

Ничто из вышеперечисленного не работает для меня на 10.9.2, так как компиляция выдает следующую ошибку:

clang: error: unknown argument: '-mno-fused-madd' 

Что на самом деле приводит к чистому решению (см. Более подробную информацию в [1]):

export CFLAGS=-Qunused-arguments
export CPPFLAGS=-Qunused-arguments

pip install lxml

или следующий, если установка глобально

sudo pip install lxml

[1] ошибка лягушки: неизвестный аргумент: '-mno-fused-madd' (ошибка установки пакета python)


Спасибо. это помогло мне. Жаль, что ответы могут иногда содержать мета о версиях ОС.
frankV

При установке на глобальном уровне может потребоваться /etc/sudoersс , sudo visudoчтобы сохранить переменные окружения.
swandog

10
xcode-select --install
sudo easy_install pip
sudo pip install lxml

Интересно, что некоторые люди нуждались в sudoустановке pip, а другие нет. (У меня были проблемы с правами доступа при непосредственном запуске pip, и мне пришлось иметь дело с sudo.) Я могу только предположить, что в далеком прошлом я установил что-то, связанное с python, как root, что создавало определенные (системные) папки как root, а не как я.
Ноах Магедман

Это сработало для меня, я только что настроил новый Mac для работы, и хотя я установил XCode, я думаю, он не установил инструменты командной строки? В любом случае, запустив его, установив инструменты, а затем просто перезапустив 'pip3.4 install lxml --user', работайте без sudo или EXPORTING каких-либо переменных оболочки.
Mgrandi

Это отлично сработало на Yosemite в virtualenv. Я не нуждался sudoхотя.
ноль

@NoachMagedman Я устанавливаю в виртуальную среду, поэтому я не могу использовать sudo. Если бы я использовал sudo, он установил бы его в мои глобальные пакеты python, чего я и стараюсь избегать.
Эстебан

6

Я решил эту проблему Yosemite, выполнив следующие команды:

xcode-select install #this may take several minutes.
pip install lxml

У меня было достаточно доморощенного дела, создающего запутанный беспорядок в моей старой системе, поэтому я поклялся не использовать его с моей новой установкой Yosemite 10.10.2. Я уже установил весь пакет XCode, поэтому нет необходимости xcode-select installдля меня. Я скачал последние пакеты libxml2 и libxlst (необходимые для lxml), но перед их установкой я подумал, что проверю, есть ли у Yosemite эти файлы где-нибудь. Я создал виртуальный env (используя virtualenvwrapper), а затем сделал pip install lxml, и lxml установил без ошибок. Я протестировал lxml, почистив главную страницу Google, и это сработало нормально.
7

4

В homebrew libxml2 скрыт, чтобы не мешать системе libxml2, поэтому pip нужно немного помочь, чтобы найти его.

С баш:

LDFLAGS=-L`brew --prefix libxml2`/lib CPPFLAGS=-I`brew --prefix libxml2`/include/libxml2 pip install --user lxml

С рыбой:

env LDFLAGS=-L(brew --prefix libxml2)/lib CPPFLAGS=-I(brew --prefix libxml2)/include/libxml2 pip install --user lxml

2

OSX 10.9.2

sudo env ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future STATIC_DEPS=true pip install lxml

2

Я перепробовал все ответы на этой странице, ни один из них не помог мне. Я использую OS X версии 10.9.2

Но это определенно работает .... как шарм

ARCHFLAGS = -Wno-error = неиспользованный-аргумент командной строки-hard-error-in-future pip install lxml


1
Это просто отключает серьезные ошибки для неиспользуемых аргументов, с которыми я сталкивался во время многих других библиотечных компиляций на OS X Mavericks. Мне показалось полезным добавить строку в мой профиль bash, поэтому мне не нужно искать ее каждый раз, когда я сталкиваюсь с ней, export ARCHFLAGS="-Wno-error=unused-command-line-argument-hard-error-in-future"или вы можете явно добавить типы архитектуры, например так:export ARCHFLAGS="-arch x86_64 -arch i386 -Wno-error=unused-command-line-argument-hard-error-in-future"
Michiel Kauw-A-Tjoe

2

К сожалению xcode-select --install, у меня не получилось, так как у меня уже была последняя версия.

Это очень странно, но я решил проблему, открыв XCode и приняв Условия. Повторный запуск не pip install lxmlвернул никаких ошибок после.


1

После успешной установки из pip (lxml 3.6.4) я получал сообщение об ошибке при импорте модуля lxml.etree.

Я без конца искал, чтобы установить это как обязательное условие для scrapy, и перепробовал все варианты, но в конце концов это сработало для меня (mac osx 10.11 python 2.7):

$ STATIC_DEPS=true sudo easy_install-2.7 "lxml==2.3.5"

Старая версия lxml, похоже, работает с модулем etree.

Пип часто может игнорировать указанную версию пакета, например , когда у вас есть новая версия в кэше пипсов, таким образом easy_install. '-2.7'Вариант для питона версии, опустим это , если вы устанавливаете для питона 3.x.


1

В моем случае я должен выключить Антивирус Касперского перед установкой lxml:

pip install lxml

0

Я использую OSX 10.9.2 и получаю ту же ошибку.

Установка инструментов командной строки XCode не помогает для этой конкретной версии OSX.

Я думаю, что лучший способ исправить это - установить с помощью следующей команды:

$ CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2 pip install lxml

Это похоже на исправление jdkoftinoff, но не меняет вашу систему постоянно.


0

Я встретил тот же вопрос и после нескольких дней работы решил эту проблему на своей OS X 10.9.4 с Python 3.4.1.

Вот мое решение,

В соответствии с установкой lxml от lxml.de,

Макпорт lxml доступен. Попробуйте что-то вроде установки порта py25-lxml

Если у вас нет MacPort, установите его с MacPort.org . Это довольно просто. Вам также может понадобиться компилятор, чтобы установить инструменты компиляции XCode, используйтеxcode-select --install

Во - первых , я обновил свой порт до последней версии через sudo port selfupdate,

Затем я просто печатаю, sudo port install libxml2и через несколько минут вы увидите, что libxml2 успешно установлен. Возможно, вам также может понадобиться libxsltустановить lxml. Для установки LibXSLT используйте: sudo port install libxslt.

Теперь просто введите pip install lxml, он должен работать нормально.


0

перед компиляцией добавьте путь к xmlversion.h в вашу среду.

$ set INCLUDE=$INCLUDE:/private/tmp/pip_build_root/lxml/src/lxml/

Но убедитесь, что указанный мной путь содержит файл xmlversion.h, расположенный внутри. Затем,

$ python setup.py install



0

После долгих разрывов волос и скрежета зубов я удалил xcode с pip и запустил:

easy_install lxml

И все было хорошо.


-1

Пытаться:

% STATIC_DEPS=true pip install lxml

Или:

% STATIC_DEPS=true sudo pip install lxml

Оно работает!


Дубликат ответа Андре.
Кар
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.