Mengapa python setup.py mengatakan perintah 'bdist_wheel' tidak valid di Travis CI?

330

Paket Python saya memiliki setup.pyyang membangun baik secara lokal di Ubuntu Trusty dan pada VM Vagy Ubuntu Trusty segar ketika saya menyediakannya seperti ini:

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

Tetapi ketika saya melakukan hal yang sama pada 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

Saya mendapat:

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'

Ini Kenapa saya tidak bisa membuat roda dengan python? terkait tetapi perhatikan saya menginstal roda dan meningkatkan setuptools.

nokome
sumber

Jawaban:

471

Harus menginstal wheelpaket. Semuanya up to date tetapi masih memberikan kesalahan.

pip install wheel

kemudian

python setup.py bdist_wheel 

Bekerja tanpa masalah.

frmdstryr
sumber
59
"pip install wheel" kadang-kadang cukup
oksidasi
20
Saya membutuhkan pip3 install wheel- karena saya sudah menginstal roda piptetapi tidak pip3.
TetraDev
2
Ini berhasil tetapi setelah pip install wheelsaya harus pip uninstall -r requirements.txtdan ulangpip install -r requirements.txt
simple_code
9
can't open file 'setup.py': [Errno 2] No such file or directory
Cerin
4
Apakah ada cara untuk menginstal secara otomatis wheeldi lingkungan virtual yang bersih? python3 -m venv --system-site-packagesakan menambahkan terlalu banyak paket.
Tobias Sette
83
pip install wheel

bekerja untuk saya, tetapi Anda juga dapat menambahkan ini

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

untuk setup.py dan simpan sendiri perintah instal pip

Nathaniel Gentile
sumber
2
Orang-orang itu sudah memiliki roda yang terpasang dan masih mendapatkan kesalahan dapat ditambahkan setup_requires=['wheel']untuk menghilangkan kesalahan ini
Shankar Pandala
1
Ini tidak berfungsi seperti yang diharapkan: 1 - pada awalnya hanya berfungsi karena kami telah menginstal wheeldengan pip. Ini akan gagal lagi dalam instalasi bersih 2 - dokumentasi mengatakan "Catatan: proyek yang terdaftar di setup_requires TIDAK akan secara otomatis diinstal pada sistem di mana skrip setup sedang dijalankan."
Tobias Sette
Tidak hanya itu, @TobiasSette, tetapi tautan dokumentasi yang sama mengatakan: "Peringatan Menggunakan setup_requires tidak disarankan demi PEP-518."
Jeff Wright
73

Jan 2020

2 jam terbuang.

Pada AWS Ubuntu 18.04 new machine, instalasi di bawah ini diperlukan:

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

Terutama baris terakhir adalah keharusan.
Namun sebelum 3 baris mungkin diperlukan sebagai prasyarat.

Semoga itu bisa membantu.

Manohar Reddy Poreddy
sumber
2
Tepat satu tahun kemudian, dan Anda telah menyelamatkan saya dari banyak perjuangan. Terima kasih.
DaveTheMinion
7
Saya menggunakan --no-install-recommendsdalam gambar Docker ( DL3015 ) dan menjalankan kesalahan ini, saya perlu menginstal secara eksplisit python3-wheel. Terima kasih!
dimo414
Senang tahu itu membantu, tambang berada di lingkungan virtual (venv).
Manohar Reddy Poreddy
1
menyelamatkan saya jam! Terima kasih banyak @ManoharReddyPoreddy
Rahul
1
Baris terakhir adalah no-op, karena roda sudah terpasang. Apakah Anda menjalankannya --upgrade? Jika ada yang bisa membuat Dockerfile minimal mulai dari Ubuntu 18.04 itu akan menjadi standar emas.
l0b0
51

Masalah ini disebabkan oleh:

  • versi lama pip (6.1.1) diinstal untuk Python 2.7
  • beberapa salinan Python 2.7 diinstal pada gambar Beta Trusty
  • lokasi berbeda untuk Python 2.7 yang digunakan untuk sudo

Semuanya agak rumit dan lebih baik dijelaskan di sini https://github.com/travis-ci/travis-ci/issues/4989 .

Solusi saya adalah menginstal dengan pengguna travisalih-alih sudo:

- pip2.7 install --upgrade --user travis pip setuptools wheel virtualenv
nokome
sumber
8
Dalam kasus saya, sudo -H pip install setuptools --upgradeselesaikan masalahnya.
Martin Thoma
2
@ MartinThoma Terima kasih atas tip Anda. Ini bekerja untuk saya setelah mengeluarkansudo -H pip install wheel --upgrade
Tarik
Upgrade pip sudah cukup dalam kasus saya, dari 9.0.1 ke 20.0.2
Seyf
45

Jika Anda sudah menginstal semua modul yang diperlukan, Anda mungkin perlu mengimpor setuptoolsmodul di setup.pyfile Anda . Jadi tambahkan saja baris berikut di bagian depan setup.pyfile.

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

Ini juga disebutkan dalam dokumentasi wheel. https://wheel.readthedocs.io/en/stable/#usage

Kasramvd
sumber
6
Ini berhasil untuk saya. Saya menggunakan distutils alih-alih setuptools untuk setup dan saya sudah menginstal paket roda.
Alex Kaszynski
26

Kesalahan ini aneh karena banyak jawaban yang diajukan dan mendapat solusi campuran. Saya mencobanya, menambahkannya. Hanya ketika saya menambahkan pip install --upgrade pipakhirnya menghapus kesalahan untuk saya. Tapi saya tidak punya waktu untuk mengisolasi yang mana, jadi ini hanya fyi.

kebenaranadjustr
sumber
23

dalam kasus saya, versi wheel / pip / setuptools yang dibuat oleh venv terlalu lama. ini bekerja:

venv/bin/pip  install --upgrade pip wheel setuptools
anggur
sumber
11

Saya sudah wheelmenginstal jadi saya mencoba untuk menghapus dan menginstal ulang, dan itu memperbaiki masalah:

pip uninstall wheel
pip install wheel

Aneh...

Jerther
sumber
FWIW Saya baru saja menemukan kesalahan ini dan menghapus dan menginstal ulang bekerja untuk saya
Vincent
8

Perbaikan saya adalah apt install python3-dev

7029279
sumber
2
Ya, dan tambahkan setup_requires=["wheel"]ke setup.py Anda
Pim Heijden
6

Di Anda setup.py, jika Anda memiliki:

from distutils.core import setup

Lalu, ubah ke

from setuptools import setup

Kemudian buat kembali virtualenv Anda dan jalankan kembali perintah, dan itu akan berhasil.

Philippe Remy
sumber
1
Ini memperbaiki masalah saya. Terima kasih. +1
Hai Vu
5

Coba modifikasi file setup.py dengan mengimpor setup dari setuptools daripada distutils.core

Shubham Laddha
sumber
Bekerja untukku! Saya sedang memigrasi paket dari Python2 ke Python3 dan sayangnya tidak dapat menemukan panduan untuk itu. Siapa pun yang melakukan hal yang sama dan merasa frustrasi dengan masalah ini, ini mungkin melakukannya untuk Anda!
skytreader
4

Saya melakukan apt-get install python3-devdi Ubuntu saya dan menambahkan setup_requires=["wheel"]disetup.py

Rohit.007
sumber
11
Mungkin cukup untuk dijalankan pip install wheel.
kap
1

Menggunakan Ubuntu 18.04 masalah ini dapat diatasi dengan menginstal python3-wheelpaket.

Biasanya ini diinstal sebagai ketergantungan pada paket Python. Tetapi terutama ketika membangun gambar kontainer yang sering Anda kerjakan --no-install-recommendsdan karena itu sering hilang dan harus diinstal secara manual terlebih dahulu.

Christian Berendt
sumber
0

Tidak terkait dengan Travis CI tetapi saya mengalami masalah yang sama mencoba menginstal jupyterpada Mac OSX 10.8.5 saya, dan tidak ada jawaban lain yang membantu. Masalahnya disebabkan oleh membangun "roda" untuk paket yang dipanggil pyzmq, dengan pesan kesalahan mengisi ratusan halaman.

Solusi yang saya temukan adalah menginstal langsung versi lama dari paket itu:

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

Setelah itu, instalasi jupyterberhasil tanpa kesalahan.

Dmitri Zaitsev
sumber
0

Jika Anda menggunakan setup.cfgfile, tambahkan ini sebelum install_requirebagian:

setup_requires =
    wheel

Contoh proyek 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
sumber