Ответ 1
С тех пор, кажется, никто не упомянул это отдельно. Мое собственное решение вышеуказанной проблемы - чаще всего отключать кэшированную копию с помощью: pip install <package> --no-cache-dir
.
Это действительно популярный вопрос здесь, в 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
.
С тех пор, кажется, никто не упомянул это отдельно. Мое собственное решение вышеуказанной проблемы - чаще всего отключать кэшированную копию с помощью: pip install <package> --no-cache-dir
.
Вчера я получил ту же ошибку: не 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"
(Пиппер здесь!)
Если пакет не является колесом, pip пытается создать для него колесо (через setup.py bdist_wheel
). Если по какой-либо причине это не удается, вы получаете сообщение "Не удалось создать колесо для pycparser", и pip возвращается к установке напрямую (через setup.py install
).
Когда у нас есть колесо, Пипс может установить колесо, распаковав его правильно. pip пытается устанавливать пакеты с помощью колес так часто, как это возможно. Это связано с различными преимуществами использования колес (например, более быстрая установка, возможность кэширования, повторное выполнение кода и т.д.).
Ваше сообщение об ошибке здесь из-за отсутствия пакета wheel
, который содержит логику, необходимую для сборки колес в setup.py bdist_wheel
. (pip install wheel
может это исправить.)
Выше приведено устаревшее поведение, которое в настоящее время используется по умолчанию; мы переключимся на PEP 517 по умолчанию, когда-нибудь в будущем, что приведет нас к стандартизированному процессу для этого. Для этого у нас также есть отдельные сборки, поэтому в этих средах по умолчанию будет установлено колесо. :)
Возможно, будет полезно решить этот вопрос с точки зрения развертывания пакета.
Существует множество учебных пособий, в которых объясняется, как опубликовать пакет в PyPi. Ниже пара, которую я использовал;
По моему опыту, в большинстве этих уроков вы используете только .tar источника, а не колесо. Таким образом, при установке пакетов, созданных с использованием этих руководств, я получил ошибку "Не удалось собрать колесо".
Позже я нашел ссылку на PyPi на документы Python Software Foundation Документы PSF. Я обнаружил, что процесс их настройки и сборки немного отличается и действительно включает в себя создание файла wheel.
После использования официально документированного метода я больше не получал сообщение об ошибке при установке своих пакетов.
Таким образом, ошибка может быть просто в том, как разработчик упаковал и развернул проект. Никто из нас не родился, зная, как использовать PyPi, и, если они столкнулись с неправильным руководством - ну, вы можете заполнить пробелы.
Я уверен, что это не единственная причина ошибки, но я готов поспорить, что это главная причина для этого.