Что означает "Не удалось построить колесо для X" в установке pip?

Это действительно популярный вопрос здесь, в 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

Что здесь происходит?

(Я хотел бы понять, как что-то может произойти сбой, но все еще устанавливается и можете ли вы доверять этому пакету, работающему правильно?)

Пока лучшее частичное объяснение, которое я нашел, состоит в следующем.


Кстати/Решение:

Решением вышеуказанной проблемы чаще всего является отключение кэшированной копии с помощью: pip install <package> --no-cache-dir.

Ответ 1

С тех пор, кажется, никто не упомянул это отдельно. Мое собственное решение вышеуказанной проблемы - чаще всего отключать кэшированную копию с помощью: pip install <package> --no-cache-dir.

Ответ 2

Вчера я получил ту же ошибку: не 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"

Ответ 3

(Пиппер здесь!)

Если пакет не является колесом, pip пытается создать для него колесо (через setup.py bdist_wheel). Если по какой-либо причине это не удается, вы получаете сообщение "Не удалось создать колесо для pycparser", и pip возвращается к установке напрямую (через setup.py install).

Когда у нас есть колесо, Пипс может установить колесо, распаковав его правильно. pip пытается устанавливать пакеты с помощью колес так часто, как это возможно. Это связано с различными преимуществами использования колес (например, более быстрая установка, возможность кэширования, повторное выполнение кода и т.д.).


Ваше сообщение об ошибке здесь из-за отсутствия пакета wheel, который содержит логику, необходимую для сборки колес в setup.py bdist_wheel. (pip install wheel может это исправить.)


Выше приведено устаревшее поведение, которое в настоящее время используется по умолчанию; мы переключимся на PEP 517 по умолчанию, когда-нибудь в будущем, что приведет нас к стандартизированному процессу для этого. Для этого у нас также есть отдельные сборки, поэтому в этих средах по умолчанию будет установлено колесо. :)

Ответ 4

Возможно, будет полезно решить этот вопрос с точки зрения развертывания пакета.

Существует множество учебных пособий, в которых объясняется, как опубликовать пакет в PyPi. Ниже пара, которую я использовал;

Средняя
настоящий питон

По моему опыту, в большинстве этих уроков вы используете только .tar источника, а не колесо. Таким образом, при установке пакетов, созданных с использованием этих руководств, я получил ошибку "Не удалось собрать колесо".

Позже я нашел ссылку на PyPi на документы Python Software Foundation Документы PSF. Я обнаружил, что процесс их настройки и сборки немного отличается и действительно включает в себя создание файла wheel.

После использования официально документированного метода я больше не получал сообщение об ошибке при установке своих пакетов.

Таким образом, ошибка может быть просто в том, как разработчик упаковал и развернул проект. Никто из нас не родился, зная, как использовать PyPi, и, если они столкнулись с неправильным руководством - ну, вы можете заполнить пробелы.

Я уверен, что это не единственная причина ошибки, но я готов поспорить, что это главная причина для этого.