¿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.

nokome
fuente

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.

frmdstryr
fuente
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

Nathaniel Gentile
fuente
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.

Manohar Reddy Poreddy
fuente
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
nokome
fuente
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

Kasramvd
fuente
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.

truthadjustr
fuente
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
Wynemo
fuente
11

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

pip uninstall wheel
pip install wheel

Extraño...

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

Mi solución fue apt install python3-dev

7029279
fuente
2
Sí, y agregue setup_requires=["wheel"]a su setup.py
Pim Heijden
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.

Philippe Remy
fuente
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

Shubham Laddha
fuente
¡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

Rohit.007
fuente
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.

Christian Berendt
fuente
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.

Dmitri Zaitsev
fuente
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
sodimel
fuente