Por que python setup.py está dizendo o comando inválido 'bdist_wheel' no Travis CI?

330

Meu pacote Python tem um setup.pyque é compilado localmente no Ubuntu Trusty e em uma nova VM Tragrant Ubuntu Tragrant quando eu provisiono assim:

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

Mas quando eu faço o mesmo em uma VM Beta Travis CI Trusty:

- 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

Eu recebo:

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'

Este Por que não posso criar uma roda em python? está relacionado, mas observe que estou instalando o wheel e atualizando as ferramentas de instalação.

nokome
fonte

Respostas:

471

Teve que instalar o wheelpacote. Tudo estava atualizado, mas ainda estava dando o erro.

pip install wheel

então

python setup.py bdist_wheel 

Trabalhou sem problemas.

frmdstryr
fonte
59
"roda de instalação do pip" às vezes é suficiente
oxidworks 23/02
20
Eu precisava pip3 install wheel- porque eu já tinha o volante instalado, pipmas não o fiz pip3.
TetraDev 07/07/19
2
Isso funcionou, mas depois pip install wheeleu tive que pip uninstall -r requirements.txte redopip install -r requirements.txt
simple_code
9
can't open file 'setup.py': [Errno 2] No such file or directory
Cerin
4
Existe uma maneira de instalar automaticamente wheelem um ambiente virtual limpo? python3 -m venv --system-site-packagesirá adicionar muitos pacotes.
Tobias Sette
83
pip install wheel

funcionou para mim, mas você também pode adicionar este

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

para setup.py e salve um comando pip install

Nathaniel Gentile
fonte
2
Essas pessoas já têm roda instalado e ainda obter o erro pode adicionar setup_requires=['wheel']para se livrar deste erro
Shankar Pandala
1
Isso não funciona como o esperado: 1 - no início, funciona apenas porque instalamos o wheelpip. Ele falhará novamente em uma instalação limpa 2 - a documentação diz "Nota: os projetos listados em setup_requires NÃO serão automaticamente instalados no sistema em que o script de instalação está sendo executado".
Tobias Sette
Não apenas isso, @TobiasSette, mas o mesmo link de documentação diz: "Aviso O uso de setup_requires é desencorajado em favor do PEP-518."
Jeff Wright
73

Jan 2020

2 horas desperdiçadas.

Em uma AWS Ubuntu 18.04 new machine, as instalações abaixo são necessárias:

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 a última linha é obrigatória.
No entanto, antes de 3 linhas pode ser necessário como pré-requisito.

Espero que ajude.

Manohar Reddy Poreddy
fonte
2
Exatamente um ano depois, e você me salvou bastante. Obrigado.
DaveTheMinion
7
Eu estava usando --no-install-recommendsuma imagem do Docker ( DL3015 ) e, ao encontrar esse erro, precisava instalar explicitamente python3-wheel. Obrigado!
dimo414 8/02
É bom saber que ajudou, o meu estava em um ambiente virtual (venv).
Manohar Reddy Poreddy
1
me salvou horas! Muito obrigado @ManoharReddyPoreddy
Rahul
1
A última linha deve ser no-op, porque a roda já está instalada. Você o executou --upgrade? Se alguém conseguir criar um Dockerfile mínimo a partir do Ubuntu 18.04, esse seria o padrão-ouro.
l0b0 9/06
51

Esse problema é devido a:

  • uma versão antiga do pip (6.1.1) sendo instalada para o Python 2.7
  • várias cópias do Python 2.7 instaladas na imagem Trusty Beta
  • um local diferente para o Python 2.7 sendo usado para sudo

É tudo um pouco complicado e melhor explicado aqui https://github.com/travis-ci/travis-ci/issues/4989 .

Minha solução foi instalar com o usuário em travisvez de sudo:

- pip2.7 install --upgrade --user travis pip setuptools wheel virtualenv
nokome
fonte
8
No meu caso, sudo -H pip install setuptools --upgraderesolvi o problema.
Martin Thoma
2
@MartinThoma Obrigado pela sua dica. Funcionou para mim após a emissãosudo -H pip install wheel --upgrade
Tarik
Atualizando pip foi suficiente no meu caso, a partir de 9.0.1 para 20.0.2
Seyf
45

Se você já possui todos os módulos necessários instalados, provavelmente precisará importar o setuptoolsmódulo no seu setup.pyarquivo. Então, basta adicionar a seguinte linha no início do setup.pyarquivo.

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

Isso também é mencionado na documentação do volante. https://wheel.readthedocs.io/en/stable/#usage

Kasramvd
fonte
6
Isso funcionou para mim. Eu estava usando distutils em vez de setuptools para a instalação e já tinha o pacote de roda instalado.
Alex Kaszynski
26

Esse erro é estranho como muitas respostas propostas e tem soluções mistas. Eu tentei, adicione-os. Foi só quando eu adicionei pip install --upgrade pipfinalmente removi o erro para mim. Mas não tenho tempo para isolar qual é qual, então isso é apenas para sua informação.

truthadjustr
fonte
23

no meu caso, a versão do wheel / pip / setuptools criada pelo venv é muito antiga. isso funciona:

venv/bin/pip  install --upgrade pip wheel setuptools
wynemo
fonte
11

Eu já tinha wheelinstalado, então tentei desinstalar e reinstalar, e o problema foi corrigido:

pip uninstall wheel
pip install wheel

Esquisito...

Jerther
fonte
FWIW: Acabei de encontrar esse erro e a desinstalação e a reinstalação funcionaram para mim #
Vincent
8

Minha correção foi apt install python3-dev

7029279
fonte
2
Sim, e adicione setup_requires=["wheel"]ao seu setup.py
Pim Heijden
6

No seu setup.py, se você tiver:

from distutils.core import setup

Em seguida, altere para

from setuptools import setup

Em seguida, recrie seu virtualenv e execute novamente o comando, e ele deve funcionar.

Philippe Remy
fonte
1
Isso resolve meu problema. Obrigado. +1
Hai Vu
5

Tente modificar o arquivo setup.py importando a instalação de setuptools em vez de distutils.core

Shubham Laddha
fonte
Trabalhou para mim! Eu estava migrando um pacote do Python2 para o Python3 e infelizmente não consegui encontrar um guia para isso. Qualquer um que esteja fazendo o mesmo e frustrado com esse problema, isso pode ser feito por você!
skytreader
4

Eu fiz apt-get install python3-devno meu Ubuntu e acrescentou setup_requires=["wheel"]emsetup.py

Rohit.007
fonte
11
Pode ser o suficiente para executar pip install wheel.
kap 6/03
1

Usando o Ubuntu 18.04, esse problema pode ser resolvido instalando o python3-wheelpacote.

Normalmente, isso é instalado como uma dependência de qualquer pacote Python. Mas, principalmente, ao criar imagens de contêineres com as quais você trabalha frequentemente --no-install-recommendse, portanto, geralmente está ausente e precisa ser instalado manualmente primeiro.

Christian Berendt
fonte
0

Não relacionado ao Travis CI, mas tive um problema semelhante ao tentar instalar jupyterno meu Mac OSX 10.8.5, e nenhuma das outras respostas foi útil. O problema foi causado pela criação da "roda" do pacote chamado pyzmq, com mensagens de erro preenchendo centenas de páginas.

A solução que encontrei foi instalar diretamente uma versão mais antiga desse pacote:

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

Depois disso, a instalação do jupytersucedeu sem erros.

Dmitri Zaitsev
fonte
0

Se você estiver usando setup.cfgarquivos, adicione-o antes da install_requirepeça:

setup_requires =
    wheel

Exemplo de projeto 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
fonte