Không thể cài đặt Lxml trên Mac os x 10.9


234

Tôi muốn cài đặt Lxml để sau đó tôi có thể cài đặt Scrapy.

Khi tôi cập nhật máy Mac của mình ngày hôm nay, nó sẽ không cho phép tôi cài đặt lại lxml, tôi gặp phải lỗi sau:

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

Tôi đã thử sử dụng brew để cài đặt libxml2 và libxslt, cả hai đều cài đặt tốt nhưng tôi vẫn không thể cài đặt lxml.

Lần trước khi cài đặt, tôi cần kích hoạt các công cụ dành cho nhà phát triển trên Xcode nhưng vì nó được cập nhật lên Xcode 5 nên nó không cung cấp cho tôi tùy chọn đó nữa.

Có ai biết tôi cần phải làm gì không?


3
PS: Tôi khuyên bạn nên sử dụng: pip3.4 install lxmlhoặc STATIC_DEPS=true pip3.4 install lxmlcác lệnh nếu bạn đang nhắm mục tiêu cài đặt cụ thể cho Python3 (thích ứng với phiên bản của bạn, bash hoàn thành TAB là bạn của bạn); để bạn cài đặt cho phiên bản cụ thể của chương trình mục tiêu đang sử dụng / các lib này. Nếu không, thật dễ dàng để chi 30 triệu để cài đặt lib cho trình thông dịch sai ;-)
Phil L.

3
Hãy chắc chắn đánh dấu câu trả lời đúng là giải pháp để người khác có thể sử dụng câu hỏi của bạn làm hướng dẫn khi họ có cùng một vấn đề :)
Parker

Câu trả lời:


500

Bạn nên cài đặt hoặc nâng cấp công cụ dòng lệnh cho xcode. Hãy thử điều này trong một thiết bị đầu cuối:

xcode-select --install

24
Tôi nhận được "Không thể cài đặt phần mềm vì phần mềm này hiện không có sẵn từ máy chủ Cập nhật phần mềm."
kelorek 17/12/13

7
Điều đáng chú ý là bạn dường như nhận được "Không thể cài đặt phần mềm vì phần mềm này hiện không có sẵn từ máy chủ Cập nhật phần mềm." khi các công cụ đã được cài đặt.
wombat

Một vài lưu ý về cách kiểm tra thủ công nếu chúng được cài đặt - stackoverflow.com/a/20834890/255961
studgeek

1
Hoạt động tốt vào ngày 10.10.3. Không chắc chắn lý do tại sao những người khác cần phải thao túng cflags.
Eric Chen

1
Và làm việc cho tôi sau khi nâng cấp lên El Capitan (10.11).
Łukasz

193

Tôi đã giải quyết vấn đề này trên Yosemite bằng cả cài đặt và liên kết libxml2libxsltthông qua brew:

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

Nếu bạn đã giải quyết vấn đề bằng phương pháp này nhưng nó sẽ bật lại sau đó, bạn có thể cần chạy nó trước bốn dòng trên:

brew unlink libxml2
brew unlink libxslt

Nếu bạn gặp lỗi về quyền với Homebrew, đặc biệt là trên El Capitan, đây là một tài liệu hữu ích . Về bản chất, bất kể phiên bản OS X, hãy thử chạy:

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

24
Câu trả lời hữu ích nhất. Thật đáng kinh ngạc khi xcode-select nhận được nhiều phiếu bầu như vậy. Nếu bạn đang sử dụng brew, bạn đã thực hiện chọn mã hoặc cài đặt xcode từ lâu.
Marcos Eliziário Santos

5
@ MarcosEliziárioSantos Từ "cài đặt" trong xcode-select --installlà một chút sai lệch. Tôi thấy rằng sau khi nâng cấp từ Mavericks lên Yosemite, tôi cần chạy xcode-select --installlại để nâng cấp lên Công cụ dòng lệnh của Yosemite. Nó (một phần) đã giải quyết được các vấn đề mà tôi đang gặp phải, và trong mọi trường hợp sẽ vô hại khi chạy một cách dư thừa.
Noach Magedman

2
@ MarcosEliziárioSantos có lẽ vì câu trả lời hàng đầu đã khắc phục vấn đề cho hầu hết mọi người. Giải pháp này hoạt động như một cách giải quyết, nhưng tôi gặp phải vấn đề tương tự với libmemcache vài giây sau đó. Câu trả lời hàng đầu đã khắc phục vấn đề. Mọi người chỉ nên xem xét phương pháp này sau khi thử câu trả lời hàng đầu trước.
Rafal Es

@ MarcosEliziárioSantos một điều nữa - Tôi đang sử dụng brew nhưng đó là một bản cài đặt mới (tôi chỉ cài đặt XCode qua AppStore, đủ để cài đặt homebrew).
Rafal Es

Ngoài ra, Homebrew luôn làm hỏng quyền của tôi. Tôi đã sử dụng giải pháp Xcode.
sudo

102

Bạn có thể giải quyết vấn đề của mình bằng cách chạy này trên dòng lệnh:

 STATIC_DEPS=true pip install lxml

Nó chắc chắn đã giúp tôi. Giải thích về tài liệu


Cảm ơn bạn rất nhiều. Điều này tiết kiệm cho tôi một lượng thời gian đáng kinh ngạc.
lukecampbell

Hoạt động tốt trên OSX 10.9.5
user9869932

Cảm ơn! Hoạt động tốt trên macOS 10.14
jolvera

48

Tôi đã thử hầu hết các giải pháp trên, nhưng không có giải pháp nào phù hợp với tôi. Tôi đang chạy Yosemite 10.10, giải pháp duy nhất phù hợp với tôi là nhập cái này vào thiết bị đầu cuối:

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: Nếu bạn đang sử dụng virtualenv, sudo khi bắt đầu là không cần thiết.


1
Giải pháp này cũng hoạt động trên Mavericks! Nếu bạn đang sử dụng virtualenvkhông cần sudo.
Mauro Baraldi

Của tôi vẫn xuất ra OSError: [Errno 1] Operation not permitted: '/usr/bin/build'mặc dù chạy lệnh như sudo. Có ý kiến ​​gì không?
PLPeeters

@PLPeeters Phiên bản nào của python bạn đang chạy và phiên bản HĐH nào?
robinsj

Tôi đang dùng bản beta El Capitan (vì vậy là 10.11) và sử dụng Python 2.7 cho việc này. Tôi đoán nó có thể có liên quan đến El Capitan ...
PLPeeters

Bạn là một người cứu rỗi cuộc sống. El capitan hoạt động, trong virtualenv không cần sudo. Cảm ơn!
jacoor

24

Điều này đã làm phiền tôi trong một thời gian. Tôi không biết nội bộ đủ về distutils python, nhưng đường dẫn bao gồm ở đây là sai. Tôi đã thực hiện một bản hack xấu xí sau đây để giữ tôi lại cho đến khi mọi người dùng python lxml có thể sửa chữa thích hợp.

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

Cài đặt toàn cầu ... 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
Điều này làm việc với tôi, trước tiên phải cập nhật các công cụ phát triển xcode bằng cách sử dụng: xcode-select --install
xóa

Điều này đã lừa Tôi đã cài đặt các công cụ dòng lệnh xcode, nhưng có vẻ như nó cần được cập nhật.
Steven Mercatante

12

hướng dẫn cài đặt trên http://lxml.de/installation.html giải thích:

Để tăng tốc độ xây dựng trong môi trường thử nghiệm, ví dụ: trên máy chủ tích hợp liên tục, hãy tắt tối ưu hóa trình biên dịch C bằng cách đặt biến môi trường CFLAGS:

CFLAGS="-O0" pip install lxml

Làm việc hoàn hảo cho tôi. +1
João Pereira

11

Không có cách nào ở trên hoạt động với tôi vào ngày 10.9.2, vì quá trình biên dịch được giải quyết với lỗi sau:

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

Điều này thực sự dẫn đến giải pháp sạch nhất (xem thêm chi tiết trong [1]):

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

pip install lxml

hoặc theo sau nếu cài đặt trên toàn cầu

sudo pip install lxml

[1] lỗi clang: đối số không xác định: '-mno-fuses-madd' (lỗi cài đặt gói python)


cảm ơn. Điều này đã giúp tôi. mong muốn câu trả lời đôi khi có thể chứa meta về các phiên bản os.
thẳng thắn

Nếu cài đặt trên toàn cầu bạn có thể cần phải /etc/sudoerssudo visudođể bảo tồn các biến môi trường.
swandog

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

Thật thú vị khi một số người cần sudocài đặt pip trong khi những người khác thì không. .
Noach Magedman

Điều này làm việc cho tôi, tôi vừa thiết lập một máy mac mới để làm việc và mặc dù tôi đã cài đặt XCode, tôi đoán nó không cài đặt các công cụ dòng lệnh? Dù sao, chạy nó, cài đặt các công cụ và sau đó chạy lại 'pip3.4 cài đặt lxml --user' hoạt động, không sudo hoặc XUẤT KHẨU bất kỳ biến shell nào.
mgrandi

Điều này hoạt động hoàn hảo trên Yosemite trong một virtualenv. Tôi không cần sudomặc dù.
Nils

@NoachMagedman Tôi đang cài đặt vào một môi trường ảo, vì vậy tôi không thể sử dụng sudo. Nếu tôi sử dụng sudo, nó sẽ cài đặt nó vào các gói python toàn cầu của tôi, đó là điều tôi đang cố gắng tránh.
Esteban

6

Tôi đã giải quyết vấn đề này Yosemitebằng cách chạy các lệnh sau:

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

Tôi đã có đủ homebrew tạo ra một mớ hỗn độn của mọi thứ trên hệ thống cũ của mình, vì vậy tôi thề sẽ không sử dụng nó với thiết lập Yosemite 10.10.2 mới của tôi. Tôi đã cài đặt toàn bộ gói Xcode, vì vậy tôi không cần xcode-select install. Tôi đã tải xuống các gói libxml2 và libxlst mới nhất (cần thiết cho lxml), nhưng trước khi cài đặt chúng, tôi nghĩ rằng tôi nên kiểm tra xem Yosemite đã có những tệp đó ở đâu chưa. Tôi đã tạo một env ảo (sử dụng virtualenvwrapper), và sau đó tôi đã làm pip install lxmlvà lxml đã cài đặt không có lỗi. Tôi đã thử nghiệm lxml bằng cách quét trang chủ của google và điều đó đã hoạt động tốt.
7

4

Với homebrew, libxml2 bị ẩn để không can thiệp vào hệ thống libxml2, vì vậy pip phải được trợ giúp một chút để tìm thấy nó.

Với bash:

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

Với cá:

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

Tôi đã thử tất cả các câu trả lời trên trang này, không ai trong số họ làm việc cho tôi. Tôi đang chạy OS X Phiên bản 10.9.2

Nhưng điều này chắc chắn hoạt động .... như một nét duyên dáng:

ARCHFLAGS = -Wno-error = unuse-command-line-argument-hard-error-in-tương lai cài đặt lxml


1
Điều này chỉ vô hiệu hóa các lỗi cứng cho các đối số không được sử dụng, mà tôi đã gặp trong nhiều phần tổng hợp thư viện khác trên OS X Mavericks. Tôi đã thấy hữu ích khi thêm dòng vào hồ sơ bash của mình, vì vậy tôi không phải tìm kiếm nó mỗi khi tôi gặp nó: export ARCHFLAGS="-Wno-error=unused-command-line-argument-hard-error-in-future"hoặc bạn có thể thêm các kiểu kiến ​​trúc rõ ràng như thế này:export ARCHFLAGS="-arch x86_64 -arch i386 -Wno-error=unused-command-line-argument-hard-error-in-future"
Michiel Kauw-A-Tjoe

2

Thật không may xcode-select --install, không làm việc cho tôi vì tôi đã có phiên bản mới nhất.

Điều này rất lạ nhưng tôi đã giải quyết vấn đề bằng cách mở XCode và chấp nhận Điều khoản & Điều kiện. Chạy pip install lxmllại không có lỗi sau.


1

Sau khi cài đặt thành công từ pip (lxml 3.6.4), tôi đã gặp lỗi khi nhập mô-đun lxml.etree.

Tôi đã tìm kiếm không ngừng để cài đặt cái này như một vật dụng cần thiết cho phế liệu, và đã thử tất cả các tùy chọn, nhưng cuối cùng thì nó cũng hiệu quả với tôi (mac osx 10.11 python 2.7):

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

Phiên bản cũ hơn của lxml dường như hoạt động với mô-đun etree.

Pip thường có thể bỏ qua phiên bản được chỉ định của gói, ví dụ như khi bạn có phiên bản mới hơn trong bộ đệm của bộ đệm, do đó easy_install,. Các '-2.7'tùy chọn là dành cho phiên bản python, bỏ qua này nếu bạn đang cài đặt cho python 3.x.


1

Trong trường hợp của tôi, tôi phải tắt Kaspersky Antivirus trước khi cài đặt lxml bằng cách:

pip install lxml

0

Tôi đang sử dụng OSX 10.9.2 và tôi cũng gặp lỗi tương tự.

Việc cài đặt các công cụ dòng lệnh XCode không giúp ích gì cho phiên bản OSX cụ thể này.

Tôi nghĩ rằng một cách tiếp cận tốt hơn để khắc phục điều này là cài đặt bằng lệnh sau:

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

Điều này tương tự như sửa lỗi của jdkoftinoff, nhưng không thay đổi hệ thống của bạn một cách lâu dài.


0

Tôi đã gặp câu hỏi tương tự và sau nhiều ngày làm việc, tôi đã giải quyết vấn đề này trên OS X 10.9.4, với Python 3.4.1.

Đây là giải pháp của tôi,

Theo cài đặt lxml từ lxml.de,

Một macport của lxml có sẵn. Hãy thử một cái gì đó như cổng cài đặt py25-lxml

Nếu bạn không có MacPort, hãy cài đặt nó từ MacPort.org . Nó khá dễ. Bạn cũng có thể cần một trình biên dịch, để cài đặt các công cụ biên dịch XCode, hãy sử dụngxcode-select --install

Đầu tiên tôi cập nhật cổng của tôi lên phiên bản mới nhất thông qua sudo port selfupdate,

Sau đó tôi chỉ cần gõ sudo port install libxml2và vài phút sau bạn sẽ thấy libxml2 được cài đặt thành công. Có lẽ bạn cũng có thể cần libxsltphải cài đặt lxml. Để cài đặt libxslt, sử dụng : sudo port install libxslt.

Bây giờ, chỉ cần gõ pip install lxml, nó sẽ hoạt động tốt.


0

trước khi biên dịch, thêm đường dẫn đến xmlversion.h vào môi trường của bạn.

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

Nhưng hãy chắc chắn rằng đường dẫn tôi đã cung cấp có tệp xmlversion.h nằm bên trong. Sau đó,

$ python setup.py install



0

Sau nhiều lần xé tóc và nghiến răng, tôi gỡ cài đặt xcode bằng pip và chạy:

easy_install lxml

Và tất cả đều tốt.


-1

Thử:

% STATIC_DEPS=true pip install lxml

Hoặc là:

% STATIC_DEPS=true sudo pip install lxml

Nó hoạt động!


Bản sao câu trả lời của Andre.
Kar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.