Por que não consigo criar uma roda em python?

190

Aqui estão os comandos que estou executando:

$ python 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'

$ pip --version
pip 1.5.6 from /usr/local/lib/python3.4/site-packages (python 3.4)

$ python -c "import setuptools; print(setuptools.__version__)"
2.1

$ python --version
Python 3.4.1

$ which python
/usr/local/bin/python

Além disso, estou executando um mac com python homebrewed

Aqui está o meu script setup.py: https://gist.github.com/cloudformdesign/4791c46fe7cd52eb61cd

Estou ficando louca - não consigo entender por que isso não funcionaria.

vitiral
fonte
2
E você instalou o wheelpacote como aconselha a resposta de Thomas?
Martijn Pieters
1
Eu tenho o mesmo problema. Mas parece que eu não usei sudo antes do elogio. Depois de usar o elogio com permissão de administrador. funcionou.
caçador

Respostas:

301

Instale o wheelpacote primeiro:

pip install wheel

A documentação não é muito clara sobre isso, mas "o projeto wheel fornece um comando bdist_wheel para setuptools" na verdade significa "o pacote wheel ..." .

Thomas Orozco
fonte
1
Então, isso cuspiu o arquivo: nioblocks-1.01-cp34-cp34m-macosx_10_9_x86_64.whl - isso funcionará com qualquer sistema operacional ou há algo mais que preciso fazer para que ele funcione? (o "pacote" é apenas um monte de dependências para pip para instalar agora)
vitiral
1
@GarrettLinux Eu não saberia, me desculpe, mas eu encorajo você a fazer uma pergunta separada para isso; )
Thomas Orozco
1
Corrigi o problema também - adicionar qualquer arquivo ao arquivo setup.py deu a ele uma roda geral. Confira o código atualizado na minha pergunta, por exemplo.
Vitiral #
Você pode obter o erro do OP mesmo com o wheel instalado, se o setup.py de alguma forma usar distutils em vez de setuptools (como foi o meu caso), veja a resposta por geographika.
Oliver
4
Para mim, o problema era a versão antiga do pip. corrigido porpip install --upgrade pip
Ryu_hayabusa
167

Eu também encontrei a mensagem de erro invalid command 'bdist_wheel'

Acontece que o pacote setup.py usou distutils em vez de setuptools. Mudá-lo da seguinte maneira me permitiu construir a roda.

#from distutils.core import setup
from setuptools import setup
geographika
fonte
1
Sim, eu tive esse problema ao mesmo tempo! Muito importante e a mensagem de erro é ruim.
vitiral
@geographika sim este é comando também a documentação sobre docs.python.org/2/distutils/setupscript.html iria replicar os problemas que você está seeig como ele usa disutils
JamesD
3
Também pode ser necessário mudar from distutils.core import Extension, Commandpara from setuptools import Extension, Commandpelo menos o pacote com o qual eu estava trabalhando.
eseglem
Eu recebi esse erro para pycrypto e ele nem estava importando a instalação. No entanto, adicionei from setuptools import setupno início e ele corrigiu o problema.
precisa saber é
38

Atualize suas ferramentas de instalação também.

pip install setuptools --upgrade

Se isso também falhar, você pode tentar com um --forcesinalizador adicional .

luckydonald
fonte
1
minhas ferramentas de instalação foram removidas ou algo estava errado. Então, eu tinha que fazer: instalar pip setuptools --upgrade --force
nycynik
12

Eu também me deparei com isso de repente, depois que ele havia funcionado anteriormente, e era porque eu estava dentro de um virtualenv e wheelnão estava instalado no virtualenv.

jbg
fonte
8

Atualize seu pipprimeiro:

pip install --upgrade pip

para Python 3:

pip3 install --upgrade pip
Tombart
fonte
Esta é a resposta mais útil agora. Versões mais recentes do pip instalar não use bdist_wheel, então basta atualizar pip trabalhou para mim, sem a necessidade de instalar setuptools / atualizar ou roda
theferrit32
4

Também pode ser que você tenha apenas um sistema python3. Portanto, você instalou os pacotes necessários por meio da instalação do pip3, como o roda de instalação do pip3 .

Você precisará criar suas coisas usando python3 especificamente.

python3 setup.py sdist
python3 setup.py bdist_wheel

Felicidades.

Bart Dorlandt
fonte
4

Jogando em outra resposta: tente verificar o seu PYTHONPATH.

Primeiro, tente instalar wheelnovamente:

pip install wheel

Isso deve informar onde a roda está instalada, por exemplo:

Requirement already satisfied: wheel in /usr/local/lib/python3.5/dist-packages

Em seguida, adicione o local da roda ao seu PYTHONPATH:

export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.5/dist-packages/wheel

Agora, construir uma roda deve funcionar bem.

python setup.py bdist_wheel
avidreader610
fonte
2

Eu tentei tudo o que foi dito aqui sem sorte, mas encontrei uma solução alternativa. Depois de executar este comando (e falhar):bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

Vá para o diretório temporário que a ferramenta criou (fornecida na saída do último comando) e execute python setup.py bdist_wheel. O .whlarquivo está na distpasta

Aigrefin
fonte