มีใครพบคำเตือนนี้เมื่อpython setup.py install
เรียกใช้แพ็คเกจ PyPI หรือไม่?
install_requires
กำหนดสิ่งที่แพคเกจต้องการ แพ็คเกจ PyPI จำนวนมากมีตัวเลือกนี้ "ตัวเลือกการแจกจ่ายที่ไม่รู้จัก" ได้อย่างไร
มีใครพบคำเตือนนี้เมื่อpython setup.py install
เรียกใช้แพ็คเกจ PyPI หรือไม่?
install_requires
กำหนดสิ่งที่แพคเกจต้องการ แพ็คเกจ PyPI จำนวนมากมีตัวเลือกนี้ "ตัวเลือกการแจกจ่ายที่ไม่รู้จัก" ได้อย่างไร
คำตอบ:
python setup.py
ใช้ distutils ที่ไม่รองรับ install_requires setuptools ยังแจกจ่าย (ตัวตายตัวแทน) และ pip (ซึ่งใช้อย่างใดอย่างหนึ่ง) ทำ แต่คุณต้องใช้มันจริงๆ เช่นเรียก setuptools ผ่านeasy_install
คำสั่งหรือpip install
.
อีกวิธีหนึ่งคือการนำเข้าการตั้งค่าจาก setuptools ใน setup.py ของคุณ แต่นี่ไม่ใช่มาตรฐานและทำให้ทุกคนที่ต้องการใช้แพ็คเกจของคุณต้องติดตั้ง setuptools
pip
ฉันจะเรียกใช้setup.py
ไฟล์ได้อย่างไรหากฉันต้องการสร้างส่วนขยายในตำแหน่งเท่านั้น
python setup.py sdist
pip install resulting_package.tar.gz
คุณยังสามารถใช้pip install -e
เพื่อติดตั้งโดยตรงจากแหล่งที่มา แต่ฉันมักจะชอบติดตั้งจากแพ็คเกจหรือจากที่เก็บโดยตรง ..
pip install pendulum==1.4.4
ฉันมีข้อผิดพลาดเป็นผลมาจากการทำงานของ กำลังดำเนินการpip install setuptools --upgrade
ล้างข้อผิดพลาด
นี่เป็นผลลัพธ์แรกในการค้นหาโดย Google ของฉัน แต่ไม่มีคำตอบ ฉันพบว่าการอัปเกรด setuptools ช่วยแก้ปัญหาให้ฉันได้ (และ pip สำหรับการวัดที่ดี)
pip install --upgrade pip
pip install --upgrade setuptools
หวังว่านี่จะช่วยให้คนต่อไปพบลิงค์นี้!
pip3 install neovim-remote
)
ความสนใจ ! ความสนใจ ! คำตอบที่ไม่สมบูรณ์ข้างหน้า หากต้องการรับ "บันทึกล่าสุด" เกี่ยวกับสถานะของบรรจุภัณฑ์ในจักรวาล Python โปรดอ่านบทความที่มีรายละเอียดพอสมควรนี้
ฉันเพิ่งพบปัญหานี้เมื่อพยายามสร้าง / ติดตั้ง ansible ปัญหาน่าจะเป็นที่ distutils ไม่รองรับ install_requires จริงๆ Setuptools ควรใช้ Monkey-patch distutils ได้ทันที แต่ไม่เป็นเช่นนั้นอาจเป็นเพราะ setuptools รุ่นล่าสุดคือ 0.6c11 จากปี 2009 ในขณะที่ distutils เป็นโครงการหลักของ Python
ดังนั้นแม้หลังจากติดตั้ง setuptools-0.6c11-py2.7.egg ด้วยตนเองที่รัน setup.py จะเลือกเฉพาะ dist.py ที่ห่างไกลออกไปเท่านั้นไม่ใช่จาก site-package / setuptools /
นอกจากนี้เอกสารคู่มือ setuptools ยังให้คำแนะนำเกี่ยวกับการใช้ez_setupไม่ใช่สิ่งที่ไม่น่าสนใจ
อย่างไรก็ตาม setuptools นั้นมีให้โดยการแจกจ่ายในปัจจุบันและรสชาติของการตั้งค่า () นั้นรองรับ install_requires
setuptools
และdistribute
โครงการต่างๆอยู่ในระหว่างการรวมกลับเข้าด้วยกัน แต่การควบรวมกิจการยังไม่เสร็จสมบูรณ์ (ฉันจะอัปเดตบทความนี้ทันทีที่ ที่เปลี่ยนแปลง). " มีใครรู้บ้างว่าในปี 2019 จะเป็นอย่างไรบ้าง? เมื่อวันที่สิ้นสุดอายุการใช้งานของ Python 2.7 ใกล้เข้ามาอย่างรวดเร็วแพ็คเกจ Python จำนวนมากจะอยู่ระหว่างการอัปเดตและบรรจุใหม่
ฉันใช้ Mac กับ python 2.7.11 ฉันเคยเล่นกับการสร้างโปรเจ็กต์ที่เรียบง่ายและตรงไปตรงมามากโดยที่ความต้องการเพียงอย่างเดียวของฉันคือฉันสามารถเรียกใช้python setup.py install
และsetup.py
ใช้คำสั่งการตั้งค่าได้อย่างดีเยี่ยม ไม่มีการนำเข้าหรือรหัสอื่น ๆ นอกเหนือจาก kwargs ไปยังsetup()
สิ่งอื่นนอกเหนือจากที่ฉันทราบที่นี่
ฉันได้รับข้อผิดพลาดเมื่อนำเข้าsetup.py
ไฟล์ของฉันคือ:
from distutils.core import setup
เมื่อฉันใช้สิ่งนี้ฉันจะได้รับคำเตือนเช่น
/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267: UserWarning: ตัวเลือกการแจกจ่ายที่ไม่รู้จัก: คำเตือน 'entry_points' คำเตือน ( ผงชูรส)
หากฉันเปลี่ยนการนำเข้า (และไม่มีอะไรอื่น ) เป็นดังต่อไปนี้:
from distutils.core import setup
import setuptools # noqa
คำเตือนหายไป
โปรดทราบว่าฉันไม่ได้ใช้setuptools
เพียงแค่การนำเข้ามันก็เปลี่ยนพฤติกรรมเพื่อไม่ให้ส่งเสียงเตือนอีกต่อไป สำหรับฉันนี่เป็นสาเหตุของความแตกต่างที่ทำให้งงงวยอย่างแท้จริงซึ่งบางโครงการที่ฉันใช้อยู่ให้คำเตือนเหล่านั้นและบางโครงการไม่ทำ
เห็นได้ชัดว่ารูปแบบการปะลิงบางรูปแบบกำลังเกิดขึ้นและได้รับผลกระทบจากการนำเข้าดังกล่าวหรือไม่ นี่อาจไม่ใช่สถานการณ์สำหรับทุกคนที่กำลังค้นคว้าปัญหานี้ แต่สำหรับสภาพแวดล้อมที่แคบซึ่งฉันกำลังทำงานอยู่นี่คือคำตอบที่ฉันกำลังมองหา
สิ่งนี้สอดคล้องกับความคิดเห็นอื่น ๆ (ชุมชน) ซึ่งกล่าวว่าสิ่งที่น่ารังเกียจควรเป็นชุดเครื่องมือ Monkeypatch และพวกเขามีปัญหาเมื่อติดตั้ง Ansible ดูเหมือนว่า Ansible จะพยายามอนุญาตให้ติดตั้งโดยไม่ต้องมี setuptools มาก่อนแล้วจึงย้อนกลับไป
https://github.com/ansible/ansible/blob/devel/setup.py
มีหลายสิ่งหลายอย่างเกิดขึ้นในอากาศ ... แต่ถ้าคุณกำลังมองหาคำตอบง่ายๆสำหรับโปรเจ็กต์ง่ายๆคุณน่าจะแค่นำเข้า setuptools
import setuptools
ยังแก้ปัญหาให้ฉันได้อย่างน่าอัศจรรย์บน Ubuntu 16.04 ด้วย python 3.5
นี่คือคำเตือนจากสิ่งที่ผิดปกติและเป็นสัญญาณว่าคุณไม่ได้ติดตั้ง setuptools การติดตั้งจากhttp://pypi.python.org/pypi/setuptoolsจะลบคำเตือน
sudo apt-get install python-dev # for python2.x installs
sudo apt-get install python3-dev # for python3.x installs
มันจะติดตั้งส่วนหัวที่ขาดหายไป มันช่วยแก้ปัญหาของฉันได้
สรุป :
distutils
ไม่สนับสนุนinstall_requires
หรือentry_points
, setuptools
ไม่
การเปลี่ยนแปลงfrom distutils.core import setup
ในsetup.pyไปfrom setuptools import setup
หรือ refactor ของคุณsetup.pyจะใช้เพียงdistutils
มี
ฉันมาที่นี่เพราะฉันไม่รู้ว่าentry_points
เป็นเพียงsetuptools
คุณสมบัติเท่านั้น
หากคุณอยู่ที่นี่ต้องการเปลี่ยนsetuptools
เป็นdistutils
ชอบฉัน:
install_requires
จากsetup.pyและใช้requirements.txtกับpip
entry_points
เป็นscripts
( doc ) และปรับโครงสร้างโมดูลใด ๆ ที่อาศัยentry_points
เป็นสคริปต์แบบเต็มโดยใช้ shebangs และจุดเริ่มต้นเท่าที่ฉันสามารถบอกได้นี่เป็นข้อบกพร่องใน setuptools ที่ไม่ได้ลบตัวเลือกเฉพาะ setuptools ออกก่อนที่จะเรียกขึ้นไปยังคลาสพื้นฐานในไลบรารีมาตรฐาน: https://bitbucket.org/pypa/setuptools/issue/29 / หลีกเลี่ยงการเตือนผู้ใช้ที่ปล่อยออกมาเมื่อโทร
หากคุณมีอย่างไม่มีเงื่อนไขimport setuptools
ในของคุณsetup.py
(ตามที่คุณควรถ้าใช้ setuptools ตัวเลือกที่เฉพาะเจาะจง) แล้วความจริงที่สคริปต์ไม่ได้ล้มเหลวกับการImportError
แสดงให้เห็นว่า setuptools มีการติดตั้งอย่างถูกต้อง
คุณสามารถปิดเสียงเตือนได้ดังนี้:
python -W ignore::UserWarning:distutils.dist setup.py <any-other-args>
ทำสิ่งนี้เฉพาะเมื่อคุณใช้การนำเข้าที่ไม่มีเงื่อนไขซึ่งจะล้มเหลวอย่างสมบูรณ์หากไม่ได้ติดตั้ง setuptools :)
(ฉันเห็นพฤติกรรมเดียวกันนี้ในการชำระเงินจาก repo setuptools หลังการควบรวมกิจการซึ่งเป็นเหตุผลว่าทำไมฉันถึงมั่นใจว่าเป็นบั๊ก setuptools มากกว่าปัญหาการกำหนดค่าระบบฉันคาดว่าการแจกจ่ายก่อนการรวมจะมีปัญหาเดียวกัน)
ตอนนี้ฉันได้เห็นสิ่งนี้ในเครื่องมือดั้งเดิมโดยใช้ Python2.7 ซึ่งบิลด์ (เช่น Dockerfile) ติดตั้งการพึ่งพาที่ไม่ได้ตรึงตัวอย่างเช่น pytest PyTest ได้ยกเลิกการรองรับ Python 2.7 ดังนั้นคุณอาจต้องระบุเวอร์ชัน <การเปิดตัวแพ็กเกจใหม่
หรือกัดกระสุนและแปลงแอพนั้นเป็น Python 3 หากเป็นไปได้