¿Por qué python setup.py dice comando no válido 'bdist_wheel' en Travis CI?


330

Mi paquete de Python tiene un sistema setup.pyque se construye bien localmente en Ubuntu Trusty y en una nueva VM Vagrant Ubuntu Trusty cuando lo aprovisiono así:

sudo apt-get install python python-dev --force-yes --assume-yes --fix-broken
curl --silent --show-error --retry 5 https://bootstrap.pypa.io/get-pip.py | sudo python2.7
sudo -H pip install setuptools wheel virtualenv --upgrade

Pero cuando hago lo mismo en una VM Travis CI Trusty Beta:

- sudo apt-get install python python-dev --force-yes --assume-yes --fix-broken
- curl --silent --show-error --retry 5 https://bootstrap.pypa.io/get-pip.py | sudo python2.7
- sudo -H pip install setuptools wheel virtualenv --upgrade

Yo obtengo:

python2.7 setup.py bdist_wheel
usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
   or: setup.py --help [cmd1 cmd2 ...]
   or: setup.py --help-commands
   or: setup.py cmd --help
error: invalid command 'bdist_wheel'

Esto ¿Por qué no puedo crear una rueda en Python? está relacionado, pero tenga en cuenta que estoy instalando wheel y actualizando setuptools.

Respuestas:


471

Tuve que instalar el wheelpaquete. Todo estaba actualizado pero aún daba el error.

pip install wheel

luego

python setup.py bdist_wheel 

Trabajó sin problemas.


59
"rueda de instalación de pip" a veces es suficiente
oxidworks

20
Necesitaba pip3 install wheel, porque ya tenía la rueda instalada pippero no pip3.
TetraDev

2
Esto funcionó, pero después de pip install wheelque tuve que hacerlo pip uninstall -r requirements.txty rehacerpip install -r requirements.txt
simple_code

99
can't open file 'setup.py': [Errno 2] No such file or directory
Cerin

44
¿Hay alguna manera de instalar automáticamente wheelen un entorno virtual limpio? python3 -m venv --system-site-packagesagregará demasiados paquetes.
Tobias Sette

83
pip install wheel

funcionó para mí, pero también puedes agregar esto

setup(
    ...
    setup_requires=['wheel']
)

para setup.py y guardar un comando de instalación de pip


2
Esas personas ya tienen la rueda instalada y todavía obtienen el error pueden agregar setup_requires=['wheel']para deshacerse de este error
Shankar Pandala

1
Esto no funciona como se esperaba: 1 - al principio solo funciona porque lo hemos instalado wheelcon pip. Volverá a fallar en una instalación limpia 2 - la documentación dice "Nota: los proyectos enumerados en setup_requires NO se instalarán automáticamente en el sistema donde se ejecuta el script de configuración".
Tobias Sette

No solo eso, @TobiasSette, sino que el mismo enlace de documentación dice: "Se desaconseja el uso de setup_requires a favor de PEP-518".
Jeff Wright

73

Enero 2020

2 horas desperdiciadas.

En un AWS Ubuntu 18.04 new machine, se requieren las siguientes instalaciones:

sudo apt-get install gcc libpq-dev -y
sudo apt-get install python-dev  python-pip -y
sudo apt-get install python3-dev python3-pip python3-venv python3-wheel -y
pip3 install wheel

Especialmente la última línea es imprescindible.
Sin embargo, antes de 3 líneas pueden ser necesarios como requisitos previos.

Espero que ayude.


2
Exactamente un año después, y me has ahorrado mucha lucha. Gracias.
DaveTheMinion

77
Estaba usando --no-install-recommendsuna imagen Docker ( DL3015 ) y me encontré con este error, necesitaba instalarlo explícitamente python3-wheel. ¡Gracias!
dimo414

Es bueno saber que ayudó, el mío estaba en un entorno virtual (venv).
Manohar Reddy Poreddy

1
me salvó horas! Muchas gracias @ManoharReddyPoreddy
Rahul

1
La última línea debe ser no operativa, porque la rueda ya está instalada. ¿Lo ejecutaste --upgrade? Si alguien puede crear un Dockerfile mínimo a partir de Ubuntu 18.04, ese sería el estándar de oro.
l0b0

51

Este problema se debe a:

  • una versión anterior de pip (6.1.1) instalada para Python 2.7
  • múltiples copias de Python 2.7 instaladas en la imagen de Trusty Beta
  • una ubicación diferente para Python 2.7 que se usa para sudo

Todo es un poco complicado y mejor explicado aquí https://github.com/travis-ci/travis-ci/issues/4989 .

Mi solución fue instalar con el usuario en travislugar de sudo:

- pip2.7 install --upgrade --user travis pip setuptools wheel virtualenv

8
En mi caso, sudo -H pip install setuptools --upgraderesolvió el problema.
Martin Thoma

2
@ MartinThoma Gracias por tu consejo. Funcionó para mí después de emitirsudo -H pip install wheel --upgrade
Tarik

La actualización de pip fue suficiente en mi caso, de 9.0.1 a 20.0.2
Seyf

45

Si ya tiene instalados todos los módulos necesarios, probablemente necesite importar el setuptoolsmódulo en su setup.pyarchivo. Tan solo agregue la siguiente línea al inicio del setup.pyarchivo.

import setuptools
from distutils.core import setup
# other imports and setups

Esto también se menciona en la documentación de la rueda. https://wheel.readthedocs.io/en/stable/#usage


66
Esto funcionó para mí. Estaba usando distutils en lugar de setuptools para la configuración y ya tenía instalado el paquete de la rueda.
Alex Kaszynski

26

Este error es extraño ya que muchas respuestas propuestas y obtuvieron soluciones mixtas. Los probé, los agregué. Solo cuando agregué pip install --upgrade pipfinalmente eliminé el error. Pero no tengo tiempo para aislar cuál es cuál, así que esto es solo para tu información.


23

en mi caso, la versión de wheel / pip / setuptools creada por venv es demasiado antigua. esto funciona:

venv/bin/pip  install --upgrade pip wheel setuptools

11

Ya lo había wheelinstalado, así que intenté desinstalar y reinstalar, y solucionó el problema:

pip uninstall wheel
pip install wheel

Extraño...


FWIW Acabo de encontrar este error y la desinstalación y la reinstalación funcionaron para mí
Vincent


6

En tu setup.py, si tienes:

from distutils.core import setup

Luego, cámbielo a

from setuptools import setup

Luego, vuelva a crear su virtualenv y vuelva a ejecutar el comando, y debería funcionar.


1
Esto soluciona mi problema. Gracias. +1
Hai Vu

5

Intente modificar el archivo setup.py importando la configuración de setuptools en lugar de distutils.core


¡Trabajó para mi! Estaba migrando un paquete de Python2 a Python3 y desafortunadamente no pude encontrar una guía para eso. Cualquiera que haga lo mismo y se sienta frustrado con este problema, ¡esto podría hacerlo por usted!
Skytreader

4

Lo hice apt-get install python3-deven mi Ubuntu y agregué setup_requires=["wheel"]ensetup.py


11
Puede ser suficiente para correr pip install wheel.
kap


1

Con Ubuntu 18.04, este problema se puede resolver instalando el python3-wheelpaquete.

Por lo general, esto se instala como una dependencia en cualquier paquete de Python. Pero especialmente al construir imágenes de contenedor con las que a menudo trabaja --no-install-recommendsy, por lo tanto, a menudo falta y debe instalarse manualmente primero.


0

No está relacionado con Travis CI, pero me encontré con un problema similar al intentar instalar jupyteren mi Mac OSX 10.8.5, y ninguna de las otras respuestas fue de ayuda. El problema fue causado por la construcción de la "rueda" para el paquete llamado pyzmq, con mensajes de error que ocupan cientos de páginas.

La solución que encontré fue instalar directamente una versión anterior de ese paquete:

python -m pip install pyzmq==17 --user

Después de eso, la instalación de tuvo jupyteréxito sin errores.


0

Si está utilizando setup.cfgarchivos, agregue esto antes de la install_requireparte:

setup_requires =
    wheel

Ejemplo de proyecto setup.cfg:

# setup.py
from setuptools import setup

setup()
# setup.cfg
[metadata]
name = name
version = 0.0.1
description = desc
long_description = file: README.md
long_description_content_type = text/markdown
url = url
author = author
classifiers =
    Programming Language :: Python
    Programming Language :: Python :: 3

[options]
include_package_data = true
packages = find:
setup_requires =
    wheel
install_requires =
    packages
    packages
    packages
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.