ทำไมหลาม setup.py จึงพูดคำสั่งที่ไม่ถูกต้อง 'bdist_wheel' ใน Travis CI


330

แพคเกจ Python ของฉันมีสิ่งsetup.pyที่สร้างขึ้นในท้องถิ่นบน Ubuntu Trusty และ VM Trusty VM Trusty ของ Vagrant ที่สดใหม่เมื่อฉันจัดเตรียมแบบนี้:

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

แต่เมื่อฉันทำเช่นเดียวกันกับ Travis CI Trusty Beta VM:

- 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

ฉันเข้าใจ:

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'

นี้ทำไมฉันไม่สามารถสร้างล้อในหลามหรือไม่? มีความเกี่ยวข้อง แต่โปรดทราบว่าฉันกำลังติดตั้งล้อเลื่อนและอัพเกรด setuptools

คำตอบ:


470

มีการติดตั้งwheelแพคเกจ ทุกอย่างทันสมัย ​​แต่ก็ยังให้ข้อผิดพลาด

pip install wheel

แล้วก็

python setup.py bdist_wheel 

ทำงานได้โดยไม่มีปัญหา


59
"pip install wheel" บางครั้งก็เพียงพอ
ซิงก์

20
ผมจำเป็นต้องมีpip3 install wheel- เพราะฉันแล้วก็ล้อติดตั้งสำหรับแต่ไม่pip pip3
TetraDev

2
สิ่งนี้ใช้ได้ แต่หลังจากที่pip install wheelฉันต้องpip uninstall -r requirements.txtทำซ้ำpip install -r requirements.txt
simple_code

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

4
มีวิธีการติดตั้งโดยอัตโนมัติwheelในสภาพแวดล้อมเสมือนที่สะอาดหรือไม่? python3 -m venv --system-site-packagesจะเพิ่มแพ็คเกจมากเกินไป
Tobias Sette

83
pip install wheel

ทำงานให้ฉันได้ แต่คุณสามารถเพิ่มสิ่งนี้ได้

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

เพื่อ setup.py และบันทึกคำสั่ง pip install


2
คนเหล่านั้นติดตั้งวงล้ออยู่แล้วและยังคงได้รับข้อผิดพลาดสามารถเพิ่มsetup_requires=['wheel']เพื่อกำจัดข้อผิดพลาดนี้ได้
Shankar Pandala

1
สิ่งนี้ไม่ทำงานตามที่คาดไว้: 1 - ตอนแรกมันใช้งานได้เพราะเราติดตั้งwheelpip มันจะล้มเหลวอีกครั้งในการติดตั้งใหม่ทั้งหมด 2 - เอกสารระบุว่า "หมายเหตุ: โครงการที่ระบุไว้ใน setup_requires จะไม่ถูกติดตั้งโดยอัตโนมัติในระบบที่สคริปต์การติดตั้งกำลังทำงานอยู่"
Tobias Sette

ไม่เพียงแค่นั้น @TobiasSette แต่ลิงก์เอกสารชุดเดียวกันบอกว่า: "คำเตือนการใช้ setup_requires ไม่สนับสนุน PEP-518"
เจฟฟ์ไรท์

73

ม.ค. 2020

2 ชั่วโมงเสียไป

บน AWS Ubuntu 18.04 new machineจำเป็นต้องติดตั้งด้านล่าง:

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

โดยเฉพาะอย่างยิ่งบรรทัดสุดท้ายจะต้อง
อย่างไรก็ตามก่อน 3 บรรทัดอาจจำเป็นต้องมีสิ่งที่จำเป็นต้องมี

หวังว่าจะช่วย


2
อีกหนึ่งปีต่อมาและคุณช่วยฉันได้มากในการดิ้นรน ขอบคุณ.
DaveTheMinion

7
ฉันถูกใช้--no-install-recommendsในภาพหาง ( DL3015 ) python3-wheelและการทำงานเป็นข้อผิดพลาดนี้ผมจำเป็นต้องมีการติดตั้งอย่างชัดเจน ขอบคุณ!
dimo414

เป็นการดีที่จะรู้ว่ามันช่วยได้ฉันอยู่ในสภาพแวดล้อมเสมือนจริง (venv)
Manohar Reddy Poreddy

1
ช่วยฉันชั่วโมง! ขอบคุณมาก @ManoharReddyPoreddy
Rahul

1
บรรทัดสุดท้ายควรเป็นแบบไม่เปิดเนื่องจากมีการติดตั้งล้ออยู่แล้ว คุณรันด้วย--upgradeหรือไม่ หากทุกคนสามารถสร้าง Dockerfile ขั้นต่ำเริ่มต้นจาก Ubuntu 18.04 ที่จะเป็นมาตรฐานทองคำ
l0b0

51

ปัญหานี้เกิดจาก:

  • pip เก่า (6.1.1) ที่ติดตั้งสำหรับ Python 2.7
  • ติดตั้ง Python 2.7 หลายชุดในอิมเมจ Trusty Beta
  • ตำแหน่งอื่นสำหรับ Python 2.7 ที่ใช้ sudo

ทุกอย่างจะเป็นบิตซับซ้อนกว่าและดีกว่าที่นี่อธิบายhttps://github.com/travis-ci/travis-ci/issues/4989

ทางออกของฉันคือการติดตั้งกับผู้ใช้travisแทนsudo:

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

8
ในกรณีของฉันsudo -H pip install setuptools --upgradeแก้ปัญหาได้
Martin Thoma

2
@ MartinThoma ขอบคุณสำหรับเคล็ดลับของคุณ มันใช้งานได้สำหรับฉันหลังจากออกบัตรsudo -H pip install wheel --upgrade
Tarik

การอัพเกรด pip นั้นเพียงพอในกรณีของฉันจาก 9.0.1 ถึง 20.0.2
Seyf

45

หากคุณมีโมดูลที่จำเป็นทั้งหมดติดตั้งอยู่แล้วคุณอาจต้องนำเข้าsetuptoolsโมดูลในsetup.pyไฟล์ของคุณ ดังนั้นเพียงแค่เพิ่มบรรทัดต่อไปนี้ที่ชั้นนำของsetup.pyไฟล์

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

สิ่งนี้ถูกกล่าวถึงในเอกสารของล้อ https://wheel.readthedocs.io/en/stable/#usage


6
สิ่งนี้ใช้ได้สำหรับฉัน ฉันใช้ distutils แทน setuptools สำหรับการตั้งค่าและฉันได้ติดตั้งชุดล้อแล้ว
Alex Kaszynski

26

ข้อผิดพลาดนี้แปลกเหมือนคำตอบที่เสนอจำนวนมากและมีวิธีแก้ไขปัญหาที่หลากหลาย ฉันลองพวกเขาเพิ่มพวกเขา pip install --upgrade pipในที่สุดฉันก็เพิ่มข้อผิดพลาดให้ฉัน แต่ฉันไม่มีเวลาที่จะแยกซึ่งเป็นสิ่งที่ดังนั้นนี่เป็นเพียง fyi


23

ในกรณีของฉันรุ่นของ wheel / pip / setuptools ที่สร้างโดย venv นั้นเก่าเกินไป งานนี้:

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

11

ฉันwheelติดตั้งแล้วฉันจึงพยายามถอนการติดตั้งและติดตั้งใหม่และแก้ไขปัญหา:

pip uninstall wheel
pip install wheel

แปลก...


FWIW ฉันเพิ่งพบข้อผิดพลาดนี้และถอนการติดตั้งและติดตั้งใหม่ให้ฉัน
Vincent


6

ในของคุณsetup.pyถ้าคุณมี:

from distutils.core import setup

จากนั้นเปลี่ยนเป็น

from setuptools import setup

จากนั้นสร้าง virtualenv ของคุณใหม่และรันคำสั่งอีกครั้งและควรทำงาน


1
วิธีนี้ช่วยแก้ไขปัญหาของฉัน ขอบคุณ. +1
Hai Vu

5

ลองแก้ไขไฟล์ setup.py โดยนำเข้าการตั้งค่าจาก setuptools แทน distutils.core


ทำงานให้ฉัน! ฉันกำลังย้ายแพคเกจจาก Python2 ไปยัง Python3 และน่าเสียดายที่ไม่สามารถหาคำแนะนำได้ ทุกคนทำสิ่งเดียวกันและรู้สึกหงุดหงิดกับปัญหานี้สิ่งนี้อาจทำเพื่อคุณ!
skytreader

4

ฉันทำapt-get install python3-devใน Ubuntu และเพิ่มsetup_requires=["wheel"]ในsetup.py


11
pip install wheelมันอาจจะพอที่จะทำงาน
kap


1

การใช้ Ubuntu 18.04 ปัญหานี้สามารถแก้ไขได้โดยการติดตั้งpython3-wheelแพคเกจ

โดยปกติแล้วสิ่งนี้จะถูกติดตั้งเป็นการอ้างอิงบนแพ็คเกจ Python ใด ๆ แต่โดยเฉพาะอย่างยิ่งเมื่อสร้างอิมเมจคอนเทนเนอร์คุณมักจะทำงานด้วย--no-install-recommendsดังนั้นจึงมักจะหายไปและจะต้องติดตั้งด้วยตนเองก่อน


0

ไม่เกี่ยวข้องกับ Travis CI แต่ฉันพบปัญหาคล้ายกันพยายามติดตั้งjupyterบน Mac OSX 10.8.5 ของฉันและไม่มีคำตอบอื่นใดที่ช่วยได้ ปัญหาเกิดจากการสร้าง "วงล้อ" สำหรับแพ็คเกจที่เรียกว่าpyzmqมีข้อความแสดงข้อผิดพลาดกรอกหลายร้อยหน้า

วิธีแก้ปัญหาที่ฉันพบคือติดตั้งแพ็คเกจรุ่นเก่าโดยตรง:

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

หลังจากนั้นการติดตั้งjupyterสำเร็จโดยไม่มีข้อผิดพลาด


0

หากคุณกำลังใช้setup.cfgไฟล์ให้เพิ่มส่วนนี้ก่อนinstall_requireส่วน:

setup_requires =
    wheel

ตัวอย่างโครงการ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.