ไม่สามารถติดตั้ง 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 (ปรับให้เข้ากับเวอร์ชันของคุณ, การทุบตี TAB ให้สมบูรณ์คือเพื่อนของคุณ); เพื่อให้คุณติดตั้งสำหรับเวอร์ชันเป้าหมายเฉพาะของโปรแกรมเป้าหมายที่ใช้งาน / libs เหล่านี้ มิฉะนั้นมันเป็นเรื่องง่ายที่จะใช้จ่าย 30 ล้านติดตั้ง lib สำหรับล่ามผิด ;-)
ฟิลลิตร

3
ให้แน่ใจว่าได้ทำเครื่องหมายตอบที่ถูกต้องเป็นวิธีแก้ปัญหาเพื่อให้ผู้อื่นสามารถใช้คำถามของคุณเป็นคำแนะนำเมื่อพวกเขามีปัญหาเดียวกัน :)
ปาร์กเกอร์

คำตอบ:


500

คุณควรติดตั้งหรืออัพเกรดเครื่องมือ commandline สำหรับ xcode ลองใช้เทอร์มินัล:

xcode-select --install

24
ฉันได้รับ "ไม่สามารถติดตั้งซอฟต์แวร์ได้เนื่องจากไม่สามารถใช้งานได้จากเซิร์ฟเวอร์ Software Update"
kelorek

7
เป็นที่น่าสังเกตว่าคุณดูเหมือนจะได้รับ "ไม่สามารถติดตั้งซอฟต์แวร์ได้เนื่องจากไม่สามารถใช้งานได้ในขณะนี้จากเซิร์ฟเวอร์ Software Update" เมื่อติดตั้งเครื่องมือเรียบร้อยแล้ว
Wombat

หมายเหตุเล็กน้อยเกี่ยวกับวิธีการตรวจสอบด้วยตนเองว่ามีการติดตั้งไว้หรือไม่ - stackoverflow.com/a/20834890/255961
studgeek

1
ทำงานได้ดีใน 10.10.3 ไม่แน่ใจว่าทำไมคนอื่นถึงต้องจัดการ cflags
Eric Chen

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 เลือกได้รับคะแนนเสียงมากมาย หากคุณกำลังใช้ชงคุณได้เลือกรหัสหรือติดตั้ง xcode เมื่อนานมาแล้ว
Marcos Eliziário Santos

5
@ MarcosEliziárioSantosคำว่า "ติดตั้ง" ในxcode-select --installนั้นทำให้เข้าใจผิดเล็กน้อย ฉันพบว่าหลังจากอัปเกรดจาก Mavericks เป็น Yosemite ฉันต้องทำงานxcode-select --installอีกครั้งเพื่ออัปเกรดเป็น Command Line Tools ของ Yosemite (บางส่วน) แก้ไขปัญหาที่ฉันพบและในกรณีใด ๆ ก็ไม่เป็นอันตรายที่จะเรียกใช้ซ้ำซ้อน
Noach Magedman

2
@ MarcosEliziárioSantosอาจเป็นเพราะคำตอบยอดนิยมแก้ไขปัญหาสำหรับคนส่วนใหญ่ วิธีแก้ปัญหานี้ทำงานเป็นวิธีแก้ปัญหา แต่ฉันพบปัญหาที่คล้ายกันกับ libmemcache ไม่กี่วินาทีต่อมา คำตอบอันดับต้นแก้ไขปัญหาได้ ทุกคนควรพิจารณาวิธีนี้หลังจากลองคำตอบแรกสุดเท่านั้น
Rafal Es

@ MarcosEliziárioSantosอีกสิ่งหนึ่ง - ฉันใช้ Brew แต่เป็นการติดตั้งใหม่ (ฉันติดตั้ง XCode ผ่าน AppStore ซึ่งเพียงพอที่จะติดตั้ง homebrew)
Rafal Es

นอกจากนี้ Homebrew จะทำลายสิทธิ์ของฉันเสมอ ฉันใช้โซลูชัน Xcode
sudo

102

คุณสามารถแก้ปัญหาของคุณโดยใช้สิ่งนี้ใน commandline:

 STATIC_DEPS=true pip install lxml

มันช่วยฉันได้แน่นอน คำอธิบายเกี่ยวกับเอกสาร


ขอบคุณมาก. สิ่งนี้ช่วยให้ฉันประหยัดเวลาได้อย่างไม่น่าเชื่อ
lukecampbell

ทำงานได้ดีบน OSX 10.9.5
9869932

ขอบคุณ! ทำงานได้ดีบน macOS 10.14
jolvera

48

ฉันลองวิธีแก้ปัญหาส่วนใหญ่ด้านบน แต่ไม่มีวิธีใดที่ทำงานให้ฉันได้ ฉันใช้ Yosemite 10.10, ทางออกเดียวที่ได้ผลสำหรับฉันคือพิมพ์ใน terminal:

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 ด้วย! หากคุณกำลังใช้งานvirtualenvไม่จำเป็นต้องใช้sudo
Mauro Baraldi

Mine ยังคงแสดงผลOSError: [Errno 1] Operation not permitted: '/usr/bin/build'แม้จะรันคำสั่งเป็น sudo ความคิดใด ๆ
PLPeeters

@PLPeeters คุณใช้ python เวอร์ชั่นใดและเวอร์ชั่น OS ใด?
robinsj

ฉันใช้ El Capitan เบต้า (นั่นคือ 10.11) และใช้ Python 2.7 สำหรับสิ่งนี้ ฉันเดาว่ามันอาจจะมีบางสิ่งบางอย่างจะทำอย่างไรกับ El Capitan ...
PLPeeters

คุณเป็นผู้ช่วยชีวิต El capitan ทำงานได้ใน virtualenv ไม่จำเป็นต้องใช้ sudo ขอบคุณ!
jacoor

24

สิ่งนี้รบกวนฉันมาระยะหนึ่งแล้ว ฉันไม่รู้ว่า internals เพียงพอเกี่ยวกับ python distutils ฯลฯ แต่เส้นทาง include ที่นี่ผิด ฉันทำแฮ็คที่น่าเกลียดต่อไปนี้เพื่อจับฉันไว้จนกว่าคน 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 dev เป็นครั้งแรกโดยใช้: xcode-select
install

นี่เป็นการหลอกลวง ฉันติดตั้งเครื่องมือบรรทัดคำสั่ง xcode แล้ว แต่ดูเหมือนว่าจำเป็นต้องได้รับการอัปเดต
Steven Mercatante

12

คำแนะนำการติดตั้งบนhttp://lxml.de/installation.htmlอธิบาย:

หากต้องการเพิ่มความเร็วของการสร้างในสภาพแวดล้อมการทดสอบเช่นบนเซิร์ฟเวอร์การรวมอย่างต่อเนื่องให้ปิดใช้งานการปรับให้เหมาะสมของคอมไพเลอร์ C โดยการตั้งค่าตัวแปรสภาพแวดล้อม CFLAGS:

CFLAGS="-O0" pip install lxml

ทำงานไร้ที่ติสำหรับฉัน +1
João Pereira

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' (การติดตั้งแพ็กเกจหลามล้มเหลว)


ขอบคุณ สิ่งนี้ช่วยฉัน บางครั้งคำตอบที่ต้องการอาจมีเมตาเกี่ยวกับเวอร์ชันของระบบปฏิบัติการ
frankV

หากติดตั้งทั่วโลกคุณอาจต้อง/etc/sudoersใช้sudo visudoเพื่อรักษาตัวแปรสภาพแวดล้อม
swandog

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

เป็นที่น่าสนใจที่บางคนต้องการsudoการติดตั้ง pip ในขณะที่คนอื่นไม่ได้ (ฉันมีปัญหาสิทธิ์เมื่อรันการติดตั้ง pip โดยตรงและต้องใช้ sudo) ฉันสามารถสันนิษฐานได้ว่าฉันได้ติดตั้งบางสิ่งที่เกี่ยวข้องกับหลามในฐานะรูทในอดีตอันไกลโพ้นซึ่งสร้างโฟลเดอร์ (ระบบ) บางโฟลเดอร์เป็นรูทแทนที่จะเป็นตัวฉันเอง
Noach Magedman

สิ่งนี้ใช้ได้กับฉันฉันเพิ่งตั้งค่าแม็คใหม่สำหรับการทำงานและแม้ว่าฉันจะติดตั้ง XCode แต่ฉันคิดว่ามันไม่ได้ติดตั้งเครื่องมือบรรทัดคำสั่งใช่ไหม ยังไงก็ตาม, เรียกใช้มัน, โดยให้มันติดตั้งเครื่องมือและจากนั้นแค่ทำการติดตั้ง 'pip3.4 install lxml --user' ใหม่, ไม่มี sudo หรือส่งออกตัวแปรเชลล์ใด ๆ
mgrandi

สิ่งนี้ทำงานได้อย่างสมบูรณ์บน Yosemite ใน virtualenv ฉันไม่จำเป็นต้องsudoแม้ว่า
nils

@NoachMagedman ฉันกำลังติดตั้งในสภาพแวดล้อมเสมือนจริงดังนั้นฉันไม่สามารถใช้ sudo ได้ ถ้าฉันใช้ sudo มันจะติดตั้งลงในแพ็กเกจหลามส่วนกลางซึ่งเป็นสิ่งที่ฉันพยายามหลีกเลี่ยง
Esteban

6

ฉันแก้ไขปัญหานี้ได้Yosemiteโดยการรันคำสั่งต่อไปนี้:

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

ฉันมี homebrew มากพอที่จะสร้างสิ่งที่ยุ่งเหยิงบนระบบเก่าของฉันดังนั้นฉันสาบานว่าจะไม่ใช้มันกับการตั้งค่า Yosemite 10.10.2 ใหม่ของฉัน ฉันได้ติดตั้งแพ็คเกจ Xcode ทั้งหมดแล้วดังนั้นไม่จำเป็นต้องทำxcode-select installสำหรับฉัน ฉันดาวน์โหลดแพคเกจ libxml2 และ libxlst ล่าสุด (จำเป็นสำหรับ lxml) แต่ก่อนที่จะทำการติดตั้งฉันคิดว่าฉันจะตรวจสอบว่า Yosemite มีไฟล์เหล่านั้นอยู่บ้างไหม ฉันสร้าง env เสมือน (โดยใช้ virtualenvwrapper) จากนั้นฉันก็ทำpip install lxmlและข้อผิดพลาดในการติดตั้ง lxml ฟรี ฉันทดสอบ lxml ด้วยการขูดหน้าแรกของ google และทำงานได้ดี
7stud

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

ฉันลองคำตอบทั้งหมดในหน้านี้ไม่มีคำตอบใดที่เหมาะกับฉัน ฉันใช้ OS X เวอร์ชั่น 10.9.2

แต่มันใช้งานได้ดีอย่างแน่นอนเช่นเสน่ห์:

ARCHFLAGS = -Wno-error = ไม่ได้ใช้งานคำสั่งบรรทัดข้อโต้แย้งยากข้อผิดพลาดในอนาคต pip ติดตั้ง lxml


1
นี่เป็นการปิดการใช้งานข้อผิดพลาดอย่างหนักสำหรับอาร์กิวเมนต์ที่ไม่ได้ใช้ซึ่งฉันได้พบระหว่างการรวบรวมไลบรารีอื่น ๆ บน OS X Mavericks ฉันพบว่ามีประโยชน์ในการเพิ่มบรรทัดลงในโปรไฟล์ทุบตีของฉันดังนั้นฉันไม่ต้องค้นหาทุกครั้งที่พบ: 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

Pip มักจะไม่สนใจรุ่นที่ระบุของแพคเกจเช่นเมื่อคุณมีรุ่นใหม่ในแคช pip easy_installที่ทำให้ '-2.7'ตัวเลือกสำหรับรุ่นหลามละเว้นนี้ถ้าคุณกำลังติดตั้งสำหรับหลาม 3.x.



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

มี macport ของ 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

มันได้ผล!


คำตอบของ Andre ซ้ำกัน
Kar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.