Ý nghĩa của "Bánh xe xây dựng không thành công cho X" trong cài đặt pip là gì?


114

Đây là một câu hỏi thực sự phổ biến ở đây tại SO, nhưng không có câu trả lời nào trong số nhiều câu trả lời tôi đã xem, giải thích rõ ràng lỗi này thực sự có nghĩa là gì và tại sao nó xảy ra.

Một nguồn gây nhầm lẫn, đó là khi (ví dụ) bạn làm như vậy pip install pycparser, trước tiên bạn gặp lỗi:

Failed building wheel for pycparser

sau đó được theo sau bởi thông báo rằng gói đó là:

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

Chuyện gì đang xảy ra ở đây?

(Tôi muốn hiểu làm thế nào một cái gì đó có thể bị lỗi nhưng vẫn được cài đặt và liệu bạn có thể tin tưởng gói này hoạt động chính xác không?)

Cho đến nay lời giải thích một phần tốt nhất mà tôi đã tìm thấy là điều này .


8
Khi pipkhông tìm thấy bánh xe cho yêu cầu, nó sẽ tải xuống bản phân phối nguồn và cố gắng tạo một bánh xe từ nó cục bộ. thành công, bánh xe được lưu trữ trong pipbộ nhớ cache của để cài đặt lại trong tương lai. khi lỗi xây dựng bánh xe, hãy pipchuyển sang cài đặt kế thừa từ bản phân phối nguồn (đang gọi python setup.py install).
hoefling

Trong trường hợp của bạn, bạn đang thiếu wheelgói nên pipkhông thể tạo bánh xe từ các bản phân phối nguồn. nếu bạn muốn bánh xe xây dựng một cách rõ ràng vô hiệu hóa, sử dụng --no-binarycờ: pip install somepkg --no-binary=somepkg. Hoặc sử dụng pip install somepkg --no-binary=:all:, nhưng hãy cẩn thận rằng điều này sẽ vô hiệu hóa bánh xe cho mọi gói được chọn để cài đặt, bao gồm cả các gói phụ thuộc; nếu không có bản phân phối nguồn cho một số gói pipcần cài đặt, quá trình cài đặt sẽ không thành công.
hoefling

2
@hoefling: nhận xét đầu tiên của bạn là lý do thực sự và có thể là câu trả lời. Điều thứ hai là sai: --no-binaryhướng dẫn pip chỉ tải xuống và sử dụng các bản phân phối nguồn. Quả thực là lá cờ ngăn chặn nó xây dựng một bánh xe nhị phân cục bộ --no-cache-dir.
Serge Ballesta

@hoefling Tôi có wheels(0.32.2) nên đó không phải là vấn đề. Nhưng có thể pycparsergói không có bánh xe ( *.whl) được liên kết? Nhưng làm thế nào tôi có thể kiểm tra tiên nghiệm này ?
not2qubit

1
Bạn có thể tham khảo trang web PyPI tại pypi.org/project/pycparser và sau đó yêu cầu các tệp . Sau đó bạn có thể thấy rằng chỉ có một .tar.gztập tin là có và nó là sự phân bố nguồn trên PyPI (một bánh xe sẽ có một .whlphần mở rộng)
Serge Ballesta

Câu trả lời:


93

(người bảo trì pip ở đây!)

Nếu gói không phải là một bánh xe, pip sẽ cố gắng tạo một bánh xe cho nó (thông qua setup.py bdist_wheel). Nếu không thành công vì bất kỳ lý do gì, bạn sẽ nhận được thông báo "Bánh xe xây dựng không thành công cho pycparser" và pip sẽ quay trở lại cài đặt trực tiếp (qua setup.py install).

Khi chúng ta có bánh xe, pip có thể lắp bánh xe bằng cách mở hộp một cách chính xác. pip cố gắng cài đặt các gói qua bánh xe thường xuyên nhất có thể. Điều này là do các lợi ích khác nhau của việc sử dụng bánh xe (như cài đặt nhanh hơn, có thể lưu vào bộ nhớ cache, không thực thi lại mã, v.v.).


Thông báo lỗi của bạn ở đây là do wheelgói bị thiếu, có chứa logic cần thiết để xây dựng các bánh xe setup.py bdist_wheel. ( pip install wheelcó thể khắc phục điều đó.)


Trên đây là hành vi kế thừa hiện là mặc định; chúng tôi sẽ chuyển sang PEP 517 theo mặc định, đôi khi trong tương lai, chuyển chúng tôi sang quy trình dựa trên tiêu chuẩn cho việc này. Chúng tôi cũng có các bản dựng riêng biệt cho điều đó, do đó, bạn đã cài đặt bánh xe trong các môi trường đó theo mặc định. :)


1
Tại thời điểm viết OP, tôi đã wheelcài đặt gói này. Ngoài ra, vui lòng thêm một liên kết đến PEP517.
not2qubit

Bạn đã cài đặt phiên bản setuptools hoặc bánh xe cũ hơn chưa? Nếu không, đó có vẻ như là lý do cho sự thất bại ở đó. Dù sao, từ POV của pip, nó không thể tạo bánh xe và do đó nó cài đặt bình thường.
pradyunsg

Có cách nào để bỏ qua tạo bánh xe ( setup.py bdist_wheel) và chỉ thực hiện cài đặt ( setup.py install) không?
K3 --- rnc

49

Hôm qua, tôi đã gặp lỗi tương tự: Failed building wheel for hddfancontrolkhi tôi chạy pip3 install hddfancontrol. Kết quả là Failed to build hddfancontrol. Nguyên nhân là error: invalid command 'bdist_wheel'Running setup.py bdist_wheel for hddfancontrol ... error. Lỗi đã được khắc phục bằng cách chạy như sau:

 pip3 install wheel

(Từ đây .)

Ngoài ra, "bánh xe" có thể được tải xuống trực tiếp từ đây . Khi tải xuống, nó có thể được cài đặt bằng cách chạy như sau:

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

pip3 install wheelhoạt động tuyệt vời, ngay cả bên trong 'python3 -m venv', tính đến hôm nay, tôi mới sử dụng venv
Manohar Reddy Poreddy

1
ngay cả sau khi cài đặt bánh xe nó không hoạt động cho tôi!
vatsalay

33

Kể từ đó, dường như không ai đề cập đến điều này ngoài bản thân tôi. Giải pháp của riêng tôi cho vấn đề trên là thường xuyên nhất để chắc chắn rằng để vô hiệu hóa các lưu trữ bản sao bằng cách sử dụng: pip install <package> --no-cache-dir.


1
Nếu chỉ loại bỏ thông báo là mục tiêu của bạn, thì điều này có thể được coi là một cách khắc phục, nếu không thì tôi gọi đây là một giải pháp.
Nils Magnus

@NilsMagnus Đây không chỉ là getting rid of the message, nó cho phép quá trình cài đặt tiếp tục ngay cả khi trình cài đặt nghĩ rằng nó đã được cập nhật, do thư mục bộ nhớ cache chứa dư từ các bản cập nhật trước đó và thường bị lỗi.
not2qubit

^^ Điều đó nói rằng, tôi tiếp tục tự hỏi tại sao đây không phải là hành vi mặc định? Ai muốn giữ các bản sao được lưu trong bộ nhớ cache khi bạn đang cập nhật? Chỉ là không có ý nghĩa.
not2qubit,

4
Làm thế nào đó là câu trả lời được chấp nhận cho câu hỏi? Nó không trả lời câu hỏi.
PascalIv

1
Vì chính anh ấy đã hỏi nó và trả lời nó cũng vậy. Tôi nghĩ bằng cách này, anh ấy có thể chấp nhận câu trả lời của chính mình mà tôi tin. Nghe có vẻ kỳ lạ nhưng đó có thể là trường hợp.
Amit Amola

4

Có thể hữu ích khi giải quyết câu hỏi này từ góc độ triển khai gói.

Có rất nhiều hướng dẫn giải thích cách xuất bản một gói lên PyPi. Dưới đây là một vài tôi đã sử dụng;

trăn thật vừa

Kinh nghiệm của tôi là hầu hết các hướng dẫn này chỉ có bạn sử dụng .tar của nguồn, không phải bánh xe. Do đó, khi cài đặt các gói được tạo bằng các hướng dẫn này, tôi đã nhận được lỗi "Không thể tạo bánh xe".

Sau đó, tôi đã tìm thấy liên kết trên PyPi tới tài liệu PSF Docs của Quỹ phần mềm Python . Tôi phát hiện ra rằng quá trình thiết lập và xây dựng của họ hơi khác một chút và thực sự bao gồm việc xây dựng tệp bánh xe.

Sau khi sử dụng phương pháp được tài liệu chính thức, tôi không còn nhận được lỗi khi cài đặt các gói của mình.

Vì vậy, lỗi có thể đơn giản là vấn đề về cách nhà phát triển đóng gói và triển khai dự án. Không ai trong chúng ta sinh ra đã biết cách sử dụng PyPi, và nếu chúng xảy ra do hướng dẫn sai - tốt, bạn có thể điền vào chỗ trống.

Tôi chắc rằng đó không phải là lý do duy nhất gây ra lỗi, nhưng tôi sẵn sàng cá rằng đó là lý do chính của nó.


2

Thử đi:

sudo apt-get install libpcap-dev libpq-dev

Nó đã hoạt động cho tôi khi tôi đã cài đặt hai cái này.

Xem liên kết ở đây để biết thêm thông tin


0

Trên Ubuntu 18.04, tôi gặp phải sự cố này vì aptgói cho wheelkhông bao gồm wheellệnh. Tôi nghĩ rằng pip cố gắng nhập wheelgói python và nếu điều đó thành công, giả sử rằng wheellệnh cũng có sẵn. Ubuntu phá vỡ giả định đó.

Gói mã apt python3 được đặt tên python3-wheel. Điều này được cài đặt tự động vì python3-pipđề xuất nó.

Gói lệnh bánh xe apt python3 được đặt tên python-wheel-common. Cài đặt này cũng khắc phục được lỗi "bánh xe xây dựng không thành công" cho tôi.



0

Tôi nhận được thông báo tương tự khi cố gắng cài đặt pip install django-imagekit. Vì vậy, tôi đã chạy pip install wheel (tôi có python 2.7) và sau đó tôi reran pip install django-imagekit và nó hoạt động. Cảm ơn


0

Tôi muốn nói thêm rằng nếu bạn chỉ có Python3 trên hệ thống của mình thì bạn cần bắt đầu sử dụng pip3 thay vì pip.

Bạn có thể cài đặt pip3 bằng lệnh sau;

sudo apt install python3-pip -y

Sau đó, bạn có thể thử cài đặt gói bạn cần;

sudo pip3 install <package>

0

Lỗi :

Hệ thống: cá thể aws ec2 (t2 nhỏ)

sự cố: trong khi cài đặt opencv python qua

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

Điều gì đã làm việc cho tôi

pip3 install --upgrade pip setuptools wheel

Sau đó, bạn vẫn có thể nhận được lỗi sơ suất

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

Cài đặt libgl đã giải quyết được lỗi cho tôi.

sudo apt update
sudo apt install libgl1-mesa-glx

Hi vọng điêu nay co ich


0

Tôi đã gặp sự cố tương tự khi cài đặt Brotli

LỖI

Failed building wheel for Brotli

Tôi đã giải quyết nó bằng cách tải xuống .whltệp từ đây và cài đặt nó bằng lệnh dưới đây

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

-1

Điều này có thể giúp bạn! ....

Gỡ cài đặt pycparser:

pip uninstall pycparser

Cài đặt lại pycparser:

pip install pycparser

Tôi gặp lỗi tương tự khi cài đặt termcolor và tôi đã sửa nó bằng cách cài đặt lại.

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.