Pip kurulumunda "X için başarısız yapı tekerleği" nin anlamı nedir?


120

Bu, SO'da gerçekten popüler bir sorudur, ancak baktığım birçok cevaptan hiçbiri, bu hatanın gerçekte ne anlama geldiğini ve neden oluştuğunu açıkça açıklamıyor.

Bir kafa karışıklığı kaynağı, (örneğin) bunu yaptığınızda pip install pycparser, ilk önce hatayı almanızdır:

Failed building wheel for pycparser

ardından paketin şu şekilde olduğu mesajı gelir:

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

Burada neler oluyor?

(Bir şeyin nasıl başarısız olabileceğini ancak yine de yüklenebileceğini ve bu paketin doğru çalıştığına güvenip güvenemeyeceğinizi anlamak isterim?)

Şimdiye kadar bulduğum en iyi kısmi açıklama bu .


8
Ne zaman pipgereksinimi için bir tekerlek bulamazsa, bu kaynak dist indirir ve yerel olarak ondan bir tekerlek inşa etmeye çalışır. başarı durumunda, tekerlek pipgelecekteki yeniden yüklemeler için önbelleğinde saklanır . tekerlek oluşturma arızasında, pipkaynak dist'den eski kuruluma geçer (çağırma python setup.py install).
hoefling

Sizin durumunuzda, wheelpaketi kaçırıyorsunuz, bu yüzden pipkaynak dağıtımlardan tekerlek oluşturamıyorsunuz. Açıkça devre dışı bina tekerleklere istiyorsanız, kullanmak --no-binarybayrağı: pip install somepkg --no-binary=somepkg. Veya kullanın pip install somepkg --no-binary=:all:, ancak bunun bağımlılıklar da dahil olmak üzere kurulum için seçilen her paket için tekerlekleri devre dışı bırakacağına dikkat edin; pipYüklenmesi gereken bazı paketler için kaynak dağıtımı yoksa kurulum başarısız olur.
hoefling

2
@hoefling: İlk yorumunuz gerçek nedendi ve bir cevap olabilir. İkincisi yanlış: --no-binarypip'e yalnızca kaynak dağıtımlarını indirmesi ve kullanması talimatını veriyor . Yerel bir ikili tekerlek inşa etmesini engelleyen bayrak gerçekten --no-cache-dir.
Serge Ballesta

@hoefling wheels(0.32.2) var, yani sorun bu değil. Ama pycparserpakette *.whlilişkili bir tekerlek ( ) olmayabilir ? Ama bunu önceden nasıl kontrol edebilirim ?
not2qubit

1
PyPI sitesine pypi.org/project/pycparser adresinden danışabilir ve ardından dosyaları isteyebilirsiniz . O zaman sadece bir .tar.gzdosyanın orada olduğunu ve PyPI'deki kaynak dağıtım olduğunu görebilirsiniz (bir tekerleğin bir .whluzantısı vardır)
Serge Ballesta

Yanıtlar:


96

(bakıcı burada!)

Paket bir tekerlek değilse, pip bunun için (yoluyla setup.py bdist_wheel) bir tekerlek yapmaya çalışır . Bu herhangi bir nedenle başarısız olursa, "Pycparser için başarısız yapı tekerleği" mesajını alırsınız ve pip, doğrudan (üzerinden setup.py install) kuruluma geri döner .

Bir tekerleğimiz olduğunda pip, tekerleği doğru şekilde açarak takabilir. pip, paketleri olabildiğince sık olarak tekerlekler aracılığıyla yüklemeye çalışır. Bunun nedeni, tekerlek kullanmanın çeşitli avantajlarıdır (daha hızlı yükleme, önbelleğe alınabilir, kodu tekrar çalıştırmama vb.).


Buradaki hata mesajınız wheel, tekerlekleri yerleştirmek için gereken mantığı içeren paketin eksik olmasından kaynaklanmaktadır setup.py bdist_wheel. ( pip install wheelbunu düzeltebilir.)


Yukarıdakiler, şu anda varsayılan olan eski davranıştır; PEP 517'ye varsayılan olarak, gelecekte bir ara geçerek bizi bunun için standartlara dayalı bir sürece taşıyacağız. Bunun için izole edilmiş yapılarımız da var, böylece bu ortamlara varsayılan olarak tekerlek takmış olacaksınız. :)


1
OP yazarken, wheelpaketi zaten kurmuştum. Ayrıca lütfen PEP517'ye bir bağlantı ekleyin.
not2qubit

Kurulum araçlarının veya tekerlek takılı eski bir sürümünüz var mı? Değilse, oradaki başarısızlığın nedeni bu gibi görünüyor. Her neyse, pip'in bakış açısına göre, tekerleği inşa edemedi ve bu nedenle normal şekilde takıldı.
pradyunsg

Tekerlek oluşturmayı ( setup.py bdist_wheel) atlamanın ve kurulumu ( setup.py install) yapmanın bir yolu var mı ?
K3 - rnc

52

Dün aynı hatayı aldım: Failed building wheel for hddfancontrolkoştuğumda pip3 install hddfancontrol. Sonuç oldu Failed to build hddfancontrol. Nedeni error: invalid command 'bdist_wheel've idi Running setup.py bdist_wheel for hddfancontrol ... error. Aşağıdakiler çalıştırılarak hata düzeltildi:

 pip3 install wheel

(Gönderen burada .)

Alternatif olarak, "tekerlek" doğrudan buradan indirilebilir . İndirildiğinde, aşağıdakiler çalıştırılarak kurulabilir:

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

pip3 install wheel'python3 -m venv' içinde bile harika çalıştı, bugün itibariyle venv'de yeniyim
Manohar Reddy Poreddy

1
tekerleği taktıktan sonra bile benim için çalışmıyor!
vatsalay

34

O zamandan beri, benden başka kimse bundan bahsetmiyor. Yukarıdaki sorunun Kendi çözüm devre dışı bırakmak için emin olmak için en sık olan önbelleğe kullanarak kopya: pip install <package> --no-cache-dir.


1
Mesajdan kurtulmak amacınızsa, bu bir düzeltme olarak sayılabilir, aksi takdirde buna geçici çözüm derim.
Nils Magnus

@NilsMagnus Bu sadece değilgetting rid of the message , önceki ve sıklıkla başarısız olan güncellemelerden kalan kalıntıları içeren önbellek dizini nedeniyle, yükleyici zaten güncellenmiş olduğunu düşünse bile kurulumun devam etmesine izin veriyor.
not2qubit

^^ Bununla birlikte , bunun neden varsayılan davranış olmadığını merak etmeye devam ediyorum? Güncelleme yaparken önbelleğe alınmış kopyaları kim saklamak ister? Hiç mantıklı değil.
not2qubit

4
Sorunun kabul edilen yanıtı bu nasıl? Soruya cevap vermiyor.
PascalIv

1
Çünkü kendisi sordu ve cevapladı. Sanırım bu şekilde kendi cevabını kabul edebilir. Garip geliyor ama durum bu olabilir.
Amit Amola,

4

Bu soruyu bir paket dağıtım perspektifinden ele almak faydalı olabilir.

PyPi'de bir paketin nasıl yayınlanacağını açıklayan birçok öğretici var. Aşağıda kullandığım bir çift var;

orta
gerçek piton

Tecrübelerime göre, bu eğitimlerin çoğunda tekerleği değil, kaynağın .tar'ını kullanıyorsunuz. Bu nedenle, bu öğreticiler kullanılarak oluşturulan paketleri kurarken, "Tekerlek oluşturulamadı" hatasını aldım.

Daha sonra PyPi'de Python Software Foundation'ın dokümanları PSF Docs bağlantısını buldum . Kurulum ve yapım süreçlerinin biraz farklı olduğunu keşfettim ve gerçekten de bir tekerlek dosyası oluşturmayı içeriyor.

Resmi olarak belgelenmiş yöntemi kullandıktan sonra, paketlerimi yüklerken artık hatayı almadım.

Dolayısıyla, hata, geliştiricinin projeyi nasıl paketlediği ve dağıttığı ile ilgili olabilir. Hiçbirimiz PyPi'yi nasıl kullanacağımızı bilmeden doğmadık ve eğer yanlış öğretici üzerine geldilerse - boşlukları doldurabilirsiniz.

Eminim hatanın tek nedeni bu değildir, ancak bunun büyük bir neden olduğuna bahse girmeye hazırım.


2

Bunu dene:

sudo apt-get install libpcap-dev libpq-dev

Bu ikisini kurduğumda benim için çalıştı.

Bağlantısına bakın burada daha fazla bilgi için


0

Ubuntu 18.04'te, bu sorunla karşılaştım çünkü için aptpaket komutu wheeliçermiyor wheel. Bence pip, wheelpython paketini içe aktarmaya çalışıyor ve bu başarılı olursa wheelkomutun da mevcut olduğunu varsayıyor . Ubuntu bu varsayımı bozar.

Apt python3 kod paketi adlandırılır python3-wheel. Bu, python3-pipönerdiği için otomatik olarak kurulur .

Apt python3 wheel komut paketi adlandırılır python-wheel-common. Bunu da yüklemek benim için "başarısız yapı tekerleği" hatalarını düzeltir.



0

Pip install django-imagekit'i kurmaya çalıştığımda da aynı mesajı aldım. Bu yüzden pip yükleme tekerleğini çalıştırdım (python 2.7 vardı) ve sonra pip install django-imagekit'i yeniden yükledim ve çalıştı. Teşekkürler


0

Eklemek isterim ki, sisteminizde sadece Python3 varsa, pip yerine pip3 kullanmaya başlamanız gerekir.

Aşağıdaki komutu kullanarak pip3 kurabilirsiniz;

sudo apt install python3-pip -y

Bundan sonra ihtiyacınız olan paketi kurmayı deneyebilirsiniz;

sudo pip3 install <package>

0

Hata :

Sistem: aws ec2 örneği (t2 küçük)

sorun: opencv python'u yüklerken

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

Benim için ne işe yaradı

pip3 install --upgrade pip setuptools wheel

Bundan sonra hala sonda hata hatası alabilirsiniz

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

Libgl'yi yüklemek benim için hatayı çözdü.

sudo apt update
sudo apt install libgl1-mesa-glx

Bu yardımcı olur umarım


0

Brotli'yi kurarken de aynı sorunu yaşadım

HATA

Failed building wheel for Brotli

Ben indirerek çözüldü .whldosyayı burada kullanıyorum ve yüklemeden komuta altında

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

-2

Bu size yardımcı olabilir! ....

Pycparser'ı kaldırma:

pip uninstall pycparser

Pycparser'ı yeniden yükleyin:

pip install pycparser

Termcolor'u yüklerken de aynı hatayı aldım ve yeniden kurarak düzelttim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.