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.

nokome
źródło

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.

frmdstryr
źródło
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

Nathaniel Gentile
źródło
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.

Manohar Reddy Poreddy
źródło
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
nokome
źródło
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

Kasramvd
źródło
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.

trueadjustr
źródło
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
wynemo
źródło
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...

Jerther
źródło
FWIW Właśnie napotkałem ten błąd i działało dla mnie odinstalowanie i ponowna instalacja
Vincent
8

Moja poprawka była apt install python3-dev

7029279
źródło
2
Tak, i dodaj setup_requires=["wheel"]do pliku setup.py
Pim Heijden,
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ć.

Philippe Remy
źródło
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

Shubham Laddha
źródło
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

Rohit.007
źródło
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.

Christian Berendt
źródło
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.

Dmitri Zaitsev
źródło
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
sodimel
źródło