Dlaczego python setup.py mówi niepoprawne polecenie „bdist_wheel” w Travis CI?


330

Mój pakiet Python ma setup.pylokalnie dobrze działający na Ubuntu Trusty i na nowej Vagrant Ubuntu Trusty VM, gdy udostępniam go w następujący sposób:

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

Ale gdy robię to samo na maszynie wirtualnej 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

Dostaję:

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'

To dlaczego nie mogę utworzyć koła w Pythonie? jest powiązany, ale uwaga: instaluję koło i aktualizuję setuptools.

Odpowiedzi:


470

Musiałem zainstalować wheelpakiet. Wszystko było aktualne, ale wciąż dawało błąd.

pip install wheel

następnie

python setup.py bdist_wheel 

Pracowałem bez problemów.


59
Czasami wystarczy „zainstalować koło pip”
— oksydownia

20
Potrzebowałem pip3 install wheel- bo już miałem zamontowane koło, pipale nie pip3.
— TetraDev

2
To zadziałało, ale po tym, pip install wheeljak musiałem pip uninstall -r requirements.txtpowtórzyćpip install -r requirements.txt
— simple_code

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

4
Czy istnieje sposób automatycznej instalacji wheelw czystym środowisku wirtualnym? python3 -m venv --system-site-packagesdoda zbyt wiele pakietów.
— Tobias Sette,

83
pip install wheel

pracował dla mnie, ale możesz również dodać to

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

do setup.py i zapisz sobie komendę pip install


2
Ci ludzie mają już zainstalowane koło i nadal setup_requires=['wheel']
— pojawia

1
To nie działa zgodnie z oczekiwaniami: 1 - na początku działa tylko dlatego, że zainstalowaliśmy wheelz pipem. Ponownie zakończy się niepowodzeniem w czystej instalacji 2 - w dokumentacji napisano: „Uwaga: projekty wymienione w setup_requires NIE zostaną automatycznie zainstalowane w systemie, w którym uruchamiany jest skrypt instalacyjny”.
— Tobias Sette

Oprócz tego @TobiasSette, ale ten sam link do dokumentacji mówi: „Ostrzeżenie Używanie setup_requires jest odradzane na korzyść PEP-518”.
— Jeff Wright

72

Styczeń 2020 r

2 godziny zmarnowane.

W AWS Ubuntu 18.04 new machinewymagane są następujące instalacje:

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

Szczególnie ostatnia linia jest koniecznością.
Jednak przed 3 liniami mogą być wymagane jako warunki wstępne.

Mam nadzieję, że to pomaga.


2
Dokładnie rok później, a ty uratowałeś mi wiele problemów. Dziękuję Ci.
— DaveTheMinion

7
Korzystałem --no-install-recommendsz obrazu Docker ( DL3015 ) i napotkałem ten błąd, musiałem wyraźnie zainstalować python3-wheel. Dzięki!
— dimo414

Dobrze wiedzieć, że pomogło, moje było w wirtualnym środowisku (venv).
— Manohar Reddy Poreddy

1
oszczędził mi godziny! Wielkie dzięki @ManoharReddyPoreddy
— Rahul

1
Ostatnia linia powinna być zakazem, ponieważ koło jest już zainstalowane. Uruchomiłeś to --upgrade? Jeśli ktokolwiek jest w stanie stworzyć minimalny plik Dockerfile począwszy od Ubuntu 18.04, byłby to złoty standard.
— l0b0

51

Ten problem wynika z:

  • stara wersja pipa (6.1.1) jest instalowana dla Pythona 2.7
  • wiele kopii Pythona 2.7 zainstalowanych na obrazie Trusty Beta
  • inna lokalizacja dla Python 2.7 jest używana sudo

Wszystko jest trochę skomplikowane i lepiej wyjaśnione tutaj https://github.com/travis-ci/travis-ci/issues/4989 .

Moim rozwiązaniem było zainstalowanie z użytkownikiem traviszamiast sudo:

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

8
W moim przypadku sudo -H pip install setuptools --upgradeproblem został rozwiązany.
— Martin Thoma

2
@MartinThoma Dzięki za wskazówkę. Po wydaniu zadziałało dla mniesudo -H pip install wheel --upgrade
— Tarik

Aktualizacja pip wystarczyło w moim przypadku, z wersji 9.0.1 do 20.0.2
— Seyf

45

Jeśli masz już zainstalowane wszystkie wymagane moduły, prawdopodobnie musisz zaimportować setuptoolsmoduł do setup.pypliku. Więc po prostu dodaj następujący wiersz na początku setup.pypliku.

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

Jest to również wspomniane w dokumentacji koła. https://wheel.readthedocs.io/en/stable/#usage


6
To zadziałało dla mnie. Użyłem distutils zamiast setuptools do konfiguracji i już miałem zainstalowany pakiet kół.
— Alex Kaszyński

26

Ten błąd jest dziwny, ponieważ wiele proponowanych odpowiedzi i mieszanych rozwiązań. Próbowałem ich, dodaj je. Dopiero gdy dodałem, w pip install --upgrade pipkońcu usunąłem błąd. Ale nie mam czasu na wyodrębnianie, która jest która, więc to tylko fyi.


23

w moim przypadku wersja wheel / pip / setuptools stworzona przez venv jest za stara. to działa:

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

11

Mam już wheelzainstalowany, więc próbowałem odinstalować i zainstalować ponownie, a to rozwiązało problem:

pip uninstall wheel
pip install wheel

Dziwne...


FWIW Właśnie napotkałem ten błąd i działało dla mnie odinstalowanie i ponowna instalacja
— Vincent


6

W twoim setup.py, jeśli masz:

from distutils.core import setup

Następnie zmień na

from setuptools import setup

Następnie ponownie utwórz virtualenv i ponownie uruchom polecenie, i powinno działać.


1
To rozwiązuje mój problem. Dziękuję Ci. +1
— Hai Vu

5

Spróbuj zmodyfikować plik setup.py, importując setup z setuptools zamiast distutils.core


Pracował dla mnie! Migrowałem pakiet z Python2 do Python3 i niestety nie mogłem znaleźć przewodnika po tym. Każdy, kto robi to samo i denerwuje się tym problemem, może to zrobić dla Ciebie!
— skytreader

4

Zrobiłem apt-get install python3-devw moim Ubuntu i dodał setup_requires=["wheel"]wsetup.py


11
Może wystarczyć uruchomienie pip install wheel.
— kap


1

Za pomocą Ubuntu 18.04 ten problem można rozwiązać, instalując python3-wheelpakiet.

Zwykle jest to instalowane jako zależność od dowolnego pakietu Pythona. Ale szczególnie przy tworzeniu obrazów kontenerów, z którymi często pracujesz, --no-install-recommendsdlatego często ich brakuje i musisz najpierw zainstalować ręcznie.


0

Nie związany z Travis CI, ale napotkałem podobny problem, próbując zainstalować jupyterna moim Mac OSX 10.8.5, i żadna inna odpowiedź nie była pomocna. Problem został spowodowany przez zbudowanie „koła” dla pakietu o nazwiepyzmq , z komunikatami o błędach wypełniającymi setki stron.

Rozwiązaniem, które znalazłem, było bezpośrednie zainstalowanie starszej wersji tego pakietu:

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

Następnie instalacja jupyterpowiodła się bez błędów.


0

Jeśli używasz setup.cfgplików, dodaj to przed install_requireczęścią:

setup_requires =
    wheel

Przykład projektu 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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.