ความหมายของ "Failed building wheel for X" ใน pip install คืออะไร?


126

นี่เป็นคำถามยอดนิยมอย่างแท้จริงที่ SO แต่ไม่มีคำตอบมากมายที่ฉันได้ดูอธิบายอย่างชัดเจนว่าข้อผิดพลาดนี้หมายถึงอะไรและเหตุใดจึงเกิดขึ้น

สาเหตุหนึ่งของความสับสนคือเมื่อคุณทำ (เช่น) คุณจะpip install pycparserได้รับข้อผิดพลาดก่อน:

Failed building wheel for pycparser

ซึ่งตามด้วยข้อความว่าแพ็คเกจคือ:

Successfully installed pycparser-2.19.


# pip3 install pycparser

Collecting pycparser
  Using cached https://files.pythonhosted.org/packages/68/9e/49196946aee219aead1290e00d1e7fdeab8567783e83e1b9ab5585e6206a/pycparser-2.19.tar.gz
Building wheels for collected packages: pycparser
  Running setup.py bdist_wheel for pycparser ... error
  Complete output from command /usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-g_v28hpp/pycparser/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/pip-wheel-__w_f6p0 --python-tag cp36:
  Traceback (most recent call last):
    File "<string>", line 1, in <module>
    ...
    File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2349, in resolve
      module = __import__(self.module_name, fromlist=['__name__'], level=0)
  ModuleNotFoundError: No module named 'wheel.bdist_wheel'

  ----------------------------------------
  Failed building wheel for pycparser
  Running setup.py clean for pycparser
Failed to build pycparser
Installing collected packages: pycparser
  Running setup.py install for pycparser ... done
Successfully installed pycparser-2.19

เกิดขึ้นที่นี่คืออะไร?

(ฉันอยากจะเข้าใจว่ามีบางอย่างล้มเหลวได้อย่างไร แต่ยังได้รับการติดตั้งและคุณสามารถเชื่อถือได้ว่าแพ็คเกจนี้ทำงานได้ถูกต้องหรือไม่?)

เพื่อให้ห่างไกลคำอธิบายบางส่วนดีที่สุดที่ฉันได้พบคือนี้


8
เมื่อpipไม่พบล้อสำหรับความต้องการมันจะดาวน์โหลด source dist และพยายามสร้างวงล้อจากในเครื่อง เมื่อประสบความสำเร็จล้อจะถูกเก็บไว้ในpipแคชสำหรับการติดตั้งใหม่ในอนาคต เมื่อการสร้างล้อล้มเหลวให้pipเปลี่ยนไปใช้การติดตั้งแบบเดิมจากต้นทาง dist (เรียกใช้python setup.py install)
hoefling

ในกรณีของคุณคุณไม่มีwheelแพ็คเกจจึงpipไม่สามารถสร้างล้อจากระยะต้นทางได้ ถ้าคุณต้องการที่จะล้ออาคารปิดการใช้งานอย่างชัดเจนใช้ธง:--no-binary pip install somepkg --no-binary=somepkgหรือใช้pip install somepkg --no-binary=:all:แต่ระวังว่าจะปิดใช้งานล้อสำหรับทุกแพ็คเกจที่เลือกสำหรับการติดตั้งรวมถึงการอ้างอิง หากไม่มีแหล่งที่มาสำหรับบางแพ็คเกจที่pipจำเป็นต้องติดตั้งการติดตั้งจะล้มเหลว
hoefling

2
@hoefling: ความคิดเห็นแรกของคุณคือเหตุผลที่แท้จริงและอาจเป็นคำตอบได้ ข้อที่สองผิด: --no-binaryสั่งให้ pip ดาวน์โหลดและใช้การแจกแจงต้นทางเท่านั้น --no-cache-dirธงเพื่อป้องกันไม่ให้มันเพื่อสร้างล้อไบนารีท้องถิ่นแน่นอน
Serge Ballesta

@hoefling ฉันมีwheels(0.32.2) ดังนั้นนั่นไม่ใช่ปัญหา แต่pycparserแพ็คเกจอาจไม่มีล้อ ( *.whl) ที่เกี่ยวข้อง? แต่ฉันจะตรวจสอบเรื่องนี้แบบนิรนัย ?
not2qubit

1
คุณสามารถปรึกษาเว็บไซต์ PyPI ที่pypi.org/project/pycparserแล้วถามสำหรับไฟล์ จากนั้นคุณจะเห็นว่ามีเพียง.tar.gzไฟล์อยู่ที่นั่นและเป็นการแจกจ่ายซอร์สบน PyPI (วงล้อจะมี.whlนามสกุล)
Serge Ballesta

คำตอบ:


106

(ผู้ดูแล pip ที่นี่!)

หากแพ็คเกจไม่ใช่ล้อ pip จะพยายามสร้างวงล้อสำหรับมัน (ผ่านsetup.py bdist_wheel) หากล้มเหลวไม่ว่าด้วยเหตุผลใดก็ตามคุณจะได้รับข้อความ "Failed building wheel for pycparser" และ pip ​​จะกลับไปติดตั้งโดยตรง (via setup.py install)

เมื่อเรามีล้อแล้ว pip สามารถติดตั้งล้อได้โดยการแกะออกอย่างถูกต้อง pip พยายามติดตั้งแพ็คเกจผ่านล้อบ่อยที่สุดเท่าที่จะทำได้ นี่เป็นเพราะข้อดีหลายประการของการใช้ล้อ (เช่นการติดตั้งที่เร็วขึ้นสามารถแคชไม่เรียกใช้รหัสอีกครั้งเป็นต้น)


ข้อผิดพลาดของคุณที่นี่คือสาเหตุที่แพคเกจเป็นที่ขาดหายไปซึ่งมีตรรกะที่จำเป็นในการสร้างล้อในwheel setup.py bdist_wheel( pip install wheelสามารถแก้ไขได้)


ข้างต้นเป็นพฤติกรรมเดิมที่ปัจจุบันเป็นค่าเริ่มต้น เราจะเปลี่ยนไปใช้ PEP 517 ตามค่าเริ่มต้นบางครั้งในอนาคตจะย้ายเราไปสู่กระบวนการตามมาตรฐานสำหรับสิ่งนี้ นอกจากนี้เรายังมีงานสร้างแยกสำหรับสิ่งนั้นคุณจะติดตั้งวงล้อในสภาพแวดล้อมเหล่านั้นตามค่าเริ่มต้น :)


1
ในขณะที่เขียน OP ฉันได้wheelติดตั้งแพ็คเกจเรียบร้อยแล้ว กรุณาเพิ่มลิงค์ไปยัง PEP517
not2qubit

คุณติดตั้ง setuptools หรือ wheel รุ่นเก่ากว่าหรือไม่? ถ้าไม่นั่นก็ดูเหมือนว่าสาเหตุของความล้มเหลวที่นั่น อย่างไรก็ตามจาก POV ของ pip มันล้มเหลวในการสร้างล้อและทำให้ติดตั้งได้ตามปกติ
pradyunsg

มีวิธีการข้ามการสร้างล้อ ( setup.py bdist_wheel) และทำการติดตั้ง ( setup.py install) หรือไม่?
K3 --- rnc

54

เมื่อวานนี้ผมมีข้อผิดพลาดเดียวกัน: เมื่อฉันวิ่งFailed building wheel for hddfancontrol ผลที่ได้คือpip3 install hddfancontrol Failed to build hddfancontrolสาเหตุคือerror: invalid command 'bdist_wheel'และRunning setup.py bdist_wheel for hddfancontrol ... error. ข้อผิดพลาดได้รับการแก้ไขโดยเรียกใช้สิ่งต่อไปนี้:

 pip3 install wheel

(จากที่นี่ )

อีกทางเลือกหนึ่งที่ "ล้อ" สามารถดาวน์โหลดได้โดยตรงจากที่นี่ เมื่อดาวน์โหลดสามารถติดตั้งได้โดยเรียกใช้สิ่งต่อไปนี้:

pip3 install "/the/file_path/to/wheel-0.32.3-py2.py3-none-any.whl"

pip3 install wheelทำงานได้ดีสำหรับแม้กระทั่งภายใน 'python3 -m venv' ณ วันนี้ฉันยังใหม่กับ venv
Manohar Reddy Poreddy

2
แม้หลังจากติดตั้งล้อแล้วก็ไม่ได้ผลสำหรับฉัน!
vatsalay

35

เนื่องจากดูเหมือนจะไม่มีใครพูดถึงเรื่องนี้นอกจากตัวฉันเอง วิธีการแก้ปัญหาของตัวเองในการแก้ไขปัญหาดังกล่าวข้างต้นเป็นส่วนใหญ่มักจะให้แน่ใจว่าจะปิดการใช้งานที่แคชpip install <package> --no-cache-dirสำเนาโดยใช้:


2
หากการกำจัดข้อความเป็นเป้าหมายของคุณสิ่งนี้อาจนับเป็นการแก้ไขมิฉะนั้นฉันจะเรียกวิธีนี้ว่าวิธีแก้ปัญหา
Nils Magnus

@NilsMagnus นี่ไม่ใช่แค่การgetting rid of the messageอนุญาตให้การติดตั้งดำเนินการต่อแม้ว่าโปรแกรมติดตั้งจะคิดว่าได้รับการอัปเดตแล้วก็ตามเนื่องจากไดเรกทอรีแคชมีสิ่งตกค้างจากการอัปเดตก่อนหน้าและมักจะล้มเหลว
not2qubit

^^ ที่พูดมาฉันก็สงสัยอยู่เรื่อยว่าทำไมถึงไม่ใช่พฤติกรรมเริ่มต้น? ใครต้องการเก็บสำเนาแคชไว้เมื่อคุณอัปเดต แค่ไม่สมเหตุสมผล
not2qubit

6
คำตอบที่ได้รับการยอมรับนั้นเป็นอย่างไร? มันไม่ตอบคำถาม
PascalIv

1
เพราะเขาเองก็ถามมันและตอบมันเช่นกัน. ฉันคิดว่าวิธีนี้เขาสามารถยอมรับคำตอบของตัวเองที่ฉันเชื่อได้ ฟังดูแปลก แต่อาจเป็นเช่นนั้น
Amit Amola

4

การตอบคำถามนี้จากมุมมองการปรับใช้แพคเกจอาจเป็นประโยชน์

มีบทเรียนมากมายที่อธิบายวิธีการเผยแพร่แพ็คเกจไปยัง PyPi ด้านล่างนี้คือคู่ที่ฉันใช้

งูหลามจริงขนาดกลาง

ประสบการณ์ของฉันคือบทช่วยสอนเหล่านี้ส่วนใหญ่มีเพียงคุณใช้. tar ของแหล่งที่มาเท่านั้นไม่ใช่ล้อเลื่อน ดังนั้นเมื่อติดตั้งแพ็คเกจที่สร้างโดยใช้บทช่วยสอนเหล่านี้ฉันได้รับข้อผิดพลาด "Failed to build wheel"

ต่อมาฉันพบลิงก์บน PyPi ไปยังเอกสารPSF Docsของ Python Software Foundationเอกสารฉันค้นพบว่ากระบวนการตั้งค่าและการสร้างนั้นแตกต่างกันเล็กน้อยและรวมถึงการสร้างไฟล์ล้อ

หลังจากใช้วิธีการที่บันทึกไว้อย่างเป็นทางการฉันไม่ได้รับข้อผิดพลาดขณะติดตั้งแพ็คเกจอีกต่อไป

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

ฉันแน่ใจว่านั่นไม่ใช่เหตุผลเดียวที่ทำให้เกิดข้อผิดพลาด แต่ฉันยินดีที่จะเดิมพันนั่นคือเหตุผลสำคัญสำหรับมัน


2

ลองสิ่งนี้:

sudo apt-get install libpcap-dev libpq-dev

มันได้ผลสำหรับฉันเมื่อฉันติดตั้งทั้งสองนี้

ดูลิงค์ที่นี่สำหรับข้อมูลเพิ่มเติม


1

ข้อผิดพลาด:

ระบบ: อินสแตนซ์ aws ec2 (t2 เล็ก)

ปัญหา: ขณะติดตั้ง opencv python ผ่าน

pip3 install opencv-python

  Problem with the CMake installation, aborting build. CMake executable is cmake
  
  ----------------------------------------
  Failed building wheel for opencv-python
  Running setup.py clean for opencv-python

อะไรที่เหมาะกับฉัน

pip3 install --upgrade pip setuptools wheel

หลังจากนี้คุณอาจยังคงได้รับข้อผิดพลาดล้มเหลว

    from .cv2 import *
ImportError: libGL.so.1: cannot open shared object file: No such file or directory

การติดตั้ง libgl แก้ไขข้อผิดพลาดให้ฉัน

sudo apt update
sudo apt install libgl1-mesa-glx

หวังว่านี่จะช่วยได้


1
pip3 install --upgrade pip setuptools wheelแก้ไขให้ฉันด้วย
wotter

0

ใน Ubuntu 18.04 ฉันพบปัญหานี้เนื่องจากaptแพคเกจสำหรับwheelไม่มีwheelคำสั่ง ฉันคิดว่า pip พยายามนำเข้าwheelแพคเกจ python และหากสำเร็จจะถือว่าไฟล์wheelทำได้คำสั่งนั้นพร้อมใช้งาน Ubuntu ทำลายข้อสันนิษฐานนั้น

แพคเกจรหัสฉลาด python3 python3-wheelเป็นชื่อ สิ่งนี้ถูกติดตั้งโดยอัตโนมัติเนื่องจากpython3-pipแนะนำ

แพคเกจคำสั่งล้อฉลาด python3 python-wheel-commonเป็นชื่อ การติดตั้งสิ่งนี้ก็ช่วยแก้ไขข้อผิดพลาด "วงล้อที่ล้มเหลว" ให้ฉัน



0

ฉันได้รับข้อความเดียวกันเมื่อพยายามติดตั้ง pip install django-imagekit ดังนั้นฉันจึงใช้ pip install wheel (ฉันมี python 2.7) จากนั้นฉันก็รัน pip ติดตั้ง django-imagekit อีกครั้งและใช้งานได้ ขอบคุณ


0

ฉันต้องการเพิ่มว่าหากคุณมีเพียง Python3 ในระบบของคุณคุณต้องเริ่มใช้ pip3 แทน pip

คุณสามารถติดตั้ง pip3 โดยใช้คำสั่งต่อไปนี้

sudo apt install python3-pip -y

หลังจากนี้คุณสามารถลองติดตั้งแพ็คเกจที่คุณต้องการด้วย

sudo pip3 install <package>

0

ฉันมีปัญหาเดียวกันขณะติดตั้ง Brotli

ข้อผิดพลาด

Failed building wheel for Brotli

ฉันแก้ไขได้โดยดาวน์โหลด.whlไฟล์จากที่นี่ และติดตั้งโดยใช้คำสั่งด้านล่าง

C:\Users\{user_name}\Downloads>pip install Brotli-1.0.9-cp39-cp39-win_amd64.whl

0

ในกรณีของฉันอัปเดตเวอร์ชัน pip หลังจากสร้าง venv การอัปเดตนี้ pip จาก 9.0.1 เป็น 20.3.1

python3 -m venv env/python
source env/python/bin/activate
pip3 install pip --upgrade

แต่ข้อความคือ ...

Using legacy 'setup.py install' for django-avatar, since package 'wheel' is not installed.

จากนั้นฉันติดตั้งแพ็คเกจล้อหลังจากอัพเดต pip

python3 -m venv env/python
source env/python/bin/activate
pip3 install --upgrade pip
pip3 install wheel

และข้อความคือ ...

Building wheel for django-avatar (setup.py): started
default:   Building wheel for django-avatar (setup.py): finished with status 'done'

-3

สิ่งนี้อาจช่วยคุณได้! ....

การถอนการติดตั้ง pycparser:

pip uninstall pycparser

ติดตั้ง pycparser ใหม่:

pip install pycparser

ฉันได้รับข้อผิดพลาดเดียวกันขณะติดตั้ง termcolor และแก้ไขโดยการติดตั้งใหม่

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