Tại sao python setup.py nói lệnh không hợp lệ 'bdist_wheel' trên Travis CI?


330

Gói Python của tôi có một setup.pybản dựng tốt tại địa phương trên Ubuntu Trusty và trên máy ảo Ubuntu Trusty mới của Vagrant khi tôi cung cấp nó như thế này:

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

Nhưng khi tôi làm điều tương tự trên máy ảo 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

Tôi có:

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'

Điều này Tại sao tôi không thể tạo ra một bánh xe trong python? có liên quan nhưng lưu ý tôi đang cài đặt bánh xe và nâng cấp setuptools.

Câu trả lời:


470

Phải cài đặt wheelgói. Mọi thứ đã được cập nhật nhưng vẫn đưa ra lỗi.

pip install wheel

sau đó

python setup.py bdist_wheel 

Làm việc không có vấn đề.


59
"Bánh xe cài đặt pip" đôi khi là đủ
oxyworks

20
Tôi cần pip3 install wheel- bởi vì tôi đã cài đặt bánh xe pipnhưng không pip3.
TetraDev

2
Điều này đã làm việc nhưng sau khi pip install wheeltôi phải pip uninstall -r requirements.txtlàm lạipip install -r requirements.txt
Simple_code

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

4
Có cách nào để tự động cài đặt wheeltrong môi trường ảo sạch không? python3 -m venv --system-site-packagessẽ thêm quá nhiều gói
Tobias Sette

83
pip install wheel

làm việc cho tôi, nhưng bạn cũng có thể thêm điều này

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

để thiết lập và lưu lại cho mình một lệnh cài đặt pip


2
Những người đã cài đặt bánh xe và vẫn nhận được lỗi có thể thêm setup_requires=['wheel']để thoát khỏi lỗi này
Shankar Pandala

1
Điều này không hoạt động như mong đợi: 1 - lúc đầu, nó chỉ hoạt động vì chúng tôi đã cài đặt wheelvới pip. Nó sẽ thất bại một lần nữa trong bản cài đặt sạch 2 - tài liệu có nội dung "Lưu ý: các dự án được liệt kê trong setup_Vquires sẽ KHÔNG được cài đặt tự động trên hệ thống nơi tập lệnh thiết lập đang được chạy."
Tobias Sette

Không chỉ vậy, @TobiasSette, mà chính liên kết tài liệu đó cũng nói: "Cảnh báo khi sử dụng setup_Vquires không được khuyến khích ủng hộ PEP-518."
Jeff Wright

73

Tháng 1 năm 2020

Lãng phí 2 tiếng.

Trên AWS Ubuntu 18.04 new machine, yêu cầu cài đặt bên dưới:

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

Đặc biệt là dòng cuối cùng là phải.
Tuy nhiên trước 3 dòng có thể được yêu cầu là điều kiện tiên quyết.

Mong rằng sẽ giúp.


2
Chính xác một năm sau, và bạn đã cứu tôi rất nhiều khó khăn. Cảm ơn bạn.
DaveTheMinion

7
Tôi đã sử dụng --no-install-recommendstrong một hình ảnh Docker ( DL3015 ) và gặp phải lỗi này, tôi cần phải cài đặt rõ ràng python3-wheel. Cảm ơn!
dimo414

Thật tốt khi biết nó đã giúp, tôi đã ở trong một môi trường ảo (venv).
Manohar Reddy Poreddy

1
tiết kiệm cho tôi hàng giờ! Cảm ơn rất nhiều @ManoharReddyPoreddy
Rahul

1
Dòng cuối cùng phải là không có, vì bánh xe đã được cài đặt. Bạn đã chạy nó với --upgrade? Nếu bất cứ ai cũng có thể tạo Dockerfile tối thiểu bắt đầu từ Ubuntu 18.04 thì đó sẽ là tiêu chuẩn vàng.
l0b0

51

Vấn đề này là do:

  • một phiên bản cũ của pip (6.1.1) đang được cài đặt cho Python 2.7
  • nhiều bản sao Python 2.7 được cài đặt trên hình ảnh Trusty Beta
  • một vị trí khác nhau cho Python 2.7 đang được sử dụng cho sudo

Tất cả đều hơi phức tạp và được giải thích tốt hơn tại đây https://github.com/travis-ci/travis-ci/issues/4989 .

Giải pháp của tôi là cài đặt với người dùng travisthay vì sudo:

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

8
Trong trường hợp của tôi, đã sudo -H pip install setuptools --upgradegiải quyết vấn đề.
Martin Thoma

2
@MartinThoma Cảm ơn lời khuyên của bạn. Nó hoạt động với tôi sau khi phát hànhsudo -H pip install wheel --upgrade
Tarik

Nâng cấp pip là đủ trong trường hợp của tôi, từ 9.0.1 đến 20.0.2
Seyf

45

Nếu bạn đã cài đặt tất cả các mô-đun cần thiết, có thể bạn cần nhập setuptoolsmô-đun trong setup.pytệp của mình . Vì vậy, chỉ cần thêm dòng sau vào đầu setup.pytập tin.

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

Điều này cũng được đề cập trong tài liệu của bánh xe. https://wheel.readthedocs.io/en/urdy/#usage


6
Điều này làm việc cho tôi. Tôi đã sử dụng distutils thay vì setuptools để thiết lập và tôi đã cài đặt gói bánh xe.
Alex Kaszynski

26

Lỗi này là lạ khi nhiều câu trả lời được đề xuất và có các giải pháp hỗn hợp. Tôi đã thử chúng, thêm chúng. Chỉ đến khi tôi thêm vào pip install --upgrade pipcuối cùng đã xóa lỗi cho tôi. Nhưng tôi không có thời gian để cô lập cái nào, vì vậy đây chỉ là fyi.


23

trong trường hợp của tôi, phiên bản của bánh xe / pip / setuptools được tạo bởi venv là quá cũ. những công việc này:

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

11

Tôi đã wheelcài đặt rồi nên tôi đã cố gắng gỡ cài đặt và cài đặt lại, và nó đã khắc phục vấn đề:

pip uninstall wheel
pip install wheel

Kỳ dị...


FWIW Tôi vừa gặp phải lỗi này và gỡ cài đặt và cài đặt lại hoạt động với tôi
Vincent

8

Sửa chữa của tôi là apt install python3-dev


2
Có, và thêm setup_requires=["wheel"]vào setup.py của bạn
Pim Heijden

6

Trong của bạn setup.py, nếu bạn có:

from distutils.core import setup

Sau đó, thay đổi nó thành

from setuptools import setup

Sau đó, tạo lại virtualenv của bạn và chạy lại lệnh, và nó sẽ hoạt động.


1
Điều này khắc phục vấn đề của tôi. Cảm ơn bạn. +1
Hải Vũ

5

Hãy thử sửa đổi tệp setup.py bằng cách nhập thiết lập từ setuptools thay vì distutils.core


Đã làm cho tôi! Tôi đã di chuyển một gói từ Python2 sang Python3 và thật không may không thể tìm thấy một hướng dẫn cho điều đó. Bất cứ ai cũng làm như vậy và cảm thấy thất vọng với vấn đề này, điều này có thể làm điều đó cho bạn!
skytreader

4

Tôi đã làm apt-get install python3-devtrong Ubuntu của tôi và thêm setup_requires=["wheel"]vàosetup.py


11
Nó có thể là đủ để chạy pip install wheel.
kap


1

Sử dụng Ubuntu 18.04 vấn đề này có thể được giải quyết bằng cách cài đặt python3-wheelgói.

Thông thường, điều này được cài đặt như là một phụ thuộc vào bất kỳ gói Python nào. Nhưng đặc biệt là khi xây dựng hình ảnh container bạn thường làm việc --no-install-recommendsvà do đó nó thường bị thiếu và phải được cài đặt thủ công trước.


0

Không liên quan đến Travis CI nhưng tôi gặp phải vấn đề tương tự khi cố gắng cài đặt jupytertrên Mac OSX 10.8.5 của mình và không có câu trả lời nào khác có ích. Vấn đề xảy ra là do xây dựng "bánh xe" cho gói được gọi làpyzmq , với thông báo lỗi lấp đầy hàng trăm trang.

Giải pháp tôi tìm thấy là trực tiếp cài đặt phiên bản cũ hơn của gói đó:

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

Sau đó, việc cài đặt jupytersucceded không có lỗi.


0

Nếu bạn đang sử dụng setup.cfgtệp, hãy thêm phần này trước install_requirephần:

setup_requires =
    wheel

Ví dụ về dự án 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.