Неможливо встановити 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
Обов’язково позначте правильну відповідь як рішення, щоб інші могли використовувати ваше запитання як керівництво, коли у них є та сама проблема :)
Parker

Відповіді:


500

Вам слід встановити або оновити інструмент командного рядка для xcode. Спробуйте це в терміналі:

xcode-select --install

24
Я отримую "Неможливо встановити програмне забезпечення, оскільки воно наразі недоступне на сервері оновлення програмного забезпечення".
келорек

7
Варто зазначити, що вам здається, що "Не вдається встановити програмне забезпечення, оскільки воно наразі недоступне на сервері оновлення програмного забезпечення". коли інструменти вже встановлені.
вомбат

Кілька зауважень про те , як вручну перевірити , якщо вони встановлені - stackoverflow.com/a/20834890/255961
studgeek

1
Відмінно працює 10.10.3. Не впевнений, чому іншим потрібно маніпулювати cflags.
Ерік Чен

1
І працював для мене після оновлення до El Capitan (10.11).
Łukasz

193

Я вирішив цю проблему на Yosemite, встановивши і пов'язуючи, libxml2і libxsltзаварюючи:

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.
Marcos Eliziário Santos

5
@ MarcosEliziárioSantos Слово "встановити" в xcode-select --installтрохи вводить в оману. Я виявив, що після оновлення від Mavericks до Yosemite, мені потрібно було xcode-select --installзнову запустити для оновлення до інструментів командного рядка Yosemite. Це (частково) вирішило проблеми, з якими я стикався, і в будь-якому випадку було б нешкідливо бігати надмірно.
Noach Magedman

2
@ MarcosEliziárioSantos, мабуть, тому, що найкраща відповідь вирішила проблему для більшості людей. Це рішення спрацювало як вирішення, але я зіткнувся з подібними проблемами з libmemcache через кілька секунд. Верхня відповідь виправила проблему. Кожен повинен розглянути цей метод, лише спробувавши першу відповідь.
Рафаль Ес

@ MarcosEliziárioSantos - ще одне - я використовую brew, але це була свіжа установка (у мене було встановлено лише XCode через AppStore, що достатньо для встановлення домашньої кави).
Рафаль Ес

Також 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

EDIT: Якщо ви використовуєте virtualenv, судо на початку не потрібне.


1
Це рішення працює і на Mavericks! Якщо ви використовуєте, virtualenvсудо не потрібно.
Мауро Баральді

Шахта все ще виводить, OSError: [Errno 1] Operation not permitted: '/usr/bin/build'незважаючи на те, що команда виконується як sudo. Будь-які ідеї?
PLPeeters

@PLPeeters Яку версію python ви використовуєте та яку версію ОС?
robinsj

Я перебуваю на бета-версії El Capitan (так це 10.11) і використовую для цього Python 2.7. Я здогадуюсь, що це може мати щось
спільне

Ви рятувальник життя. El capitan працює, в virtualenv жодне судо не потрібно. Дякую!
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

Встановлення глобально ... ОС 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
erickthered

Це зробило трюк. У мене вже були встановлені інструменти командного рядка 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] clang error: невідомий аргумент: '-mno-fused-madd' (помилка установки пакета python)


Дякую. це мені допомогло. відповіді на побажання іноді можуть містити мета про версії OS.
frankV

При установці на глобальному рівні може знадобитися /etc/sudoersз , sudo visudoщоб зберегти змінні оточення.
обмін

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

Цікаво, що деяким людям потрібно було sudoвстановити піп, а іншим - ні. (У мене були проблеми з дозволом під час запуску pip, встановлення безпосередньо, і мені довелося судо.) Я можу лише припустити, що в далекому минулому я встановив щось, що стосується python, як root, що створювало певні (системні) папки як root, а не як я.
Noach Magedman

Це працювало для мене, я щойно встановив новий mac для роботи, і хоча я встановив XCode, я думаю, він не встановив інструменти командного рядка? У будь-якому разі, запустивши це, встановивши інструменти, а потім просто перезапустивши 'pip3.4 встановити lxml --user', працював, без судо або Експортування змінних оболонок.
mgrandi

Це прекрасно спрацювало над Йосеміті у віртуаленві. Мені це не потрібно sudo.
nils

@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, і це працювало чудово.
листопада

4

З домашньою мовою libxml2 приховано, щоб не перешкоджати роботі системи libxml2, тому піпу потрібно трохи допомогти, щоб знайти її.

З баш:

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

Я спробував усі відповіді на цій сторінці, жодна з них не працювала на мене. У мене працює ОС X Версія 10.9.2

Але це, безумовно, працює .... як принадність:

ARCHFLAGS = -Wno-помилка = невикористаний командний рядок-аргумент-жорстка помилка-в майбутньому pip встановити 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.

Я нескінченно шукав, щоб встановити це як реквізит для скрапінгу, і спробував усі варіанти, але, нарешті, це спрацювало для мене (mac osx 10.11 python 2.7):

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

Старіша версія lxml, здається, працює з модулем etree.

Pip часто може ігнорувати вказану версію пакета, наприклад, якщо у вас є новіша версія в кеш-пам'яті, тим самим easy_install. '-2.7'Варіант для пітона версії, опустимо це , якщо ви встановлюєте для пітона 3.x.


1

У моєму випадку я повинен вимкнути антивірус Kaspersky перед встановленням 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

Я зіткнувся з тим же питанням, і через кілька днів роботи я вирішив цю проблему на своїй ОС 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.