pypi UserWarning: अज्ञात वितरण विकल्प: 'install_requires'


112

जब python setup.py installकोई PyPI पैकेज निष्पादित करता है, तो क्या कोई भी इस चेतावनी का सामना कर सकता है?

install_requiresपरिभाषित करता है कि पैकेज की आवश्यकता क्या है। बहुत सारे PyPI पैकेज में यह विकल्प होता है। यह "अज्ञात वितरण विकल्प" कैसे हो सकता है?



@tripleee हो सकता है, लेकिन यह सवाल उससे पहले पूछा गया था।
टायलर लॉन्ग

प्रश्न आयु एक माध्यमिक चिंता है, लेकिन मेरे पास किसी भी तरह से एक मजबूत राय नहीं है। यदि आप डुप्लीकेट नामांकन को अन्य तरीके से जाना चाहते हैं, तो शायद दृश्यता के लिए मेटा स्टैक ओवरफ्लो प्रश्न बनाएं । मेरे लिए व्यक्तिगत रूप से, दूसरे प्रश्न के स्वीकृत उत्तर ने मुझे अधिक मदद की, क्योंकि यह अधिक प्रत्यक्ष और केंद्रित है। आपको लगता है कि आपने इनमें से किसी भी उत्तर को कभी स्वीकार नहीं किया है, इसलिए यह एक ऐसा कारक है जिसे आप वास्तव में बदल सकते हैं।
त्रिकाल

1
अगर आप इस धागे को ध्यान से पढ़ेंगे तो आपको पता चलेगा कि इसमें कोई सही जवाब नहीं है। इसलिए मुझे नहीं पता कि कौन सा उत्तर स्वीकार करना है। मैं एक ऐसे उत्तर का चयन करके लोगों को गुमराह नहीं करना चाहता, जो खुद को समझा भी नहीं सकता।
टायलर लॉन्ग

जवाबों:


89

python setup.pyडिस्टुटिल का उपयोग करता है जो install_requires का समर्थन नहीं करता है। setuptools करता है, भी वितरित (इसके उत्तराधिकारी), और पाइप (जो या तो उपयोग करता है) करते हैं। लेकिन आपको वास्तव में उनका उपयोग करना होगा। यानी easy_installकमांड के माध्यम से सेटप्टूल को बुलाओ या pip install

दूसरा तरीका यह है कि आपके setup.py में setuptools से सेटअप आयात किया जा सकता है, लेकिन यह मानक नहीं है और हर कोई आपके पैकेज का उपयोग करने के इच्छुक लोगों के लिए स्थापित किया हुआ है।


3
कहो कि मैं उपयोग करना चाहता हूं pip, फिर मैं setup.pyफ़ाइल कैसे चलाऊं अगर मैं केवल एक एक्सटेंशन का निर्माण करना चाहता हूं?
फ्रेड फू

11
चेतावनी आपको अपने कोड को पैकेजिंग से नहीं रोकती है, इसलिए आप इसे चला सकते हैं python setup.py sdistऔर इसके साथ इंस्टॉल कर सकते हैं pip install resulting_package.tar.gz। आप pip install -eसीधे स्रोत से इंस्टॉल करने के लिए भी उपयोग कर सकते हैं , लेकिन मैं हमेशा पैकेज से या रिपॉजिटरी से सीधे इंस्टॉल करना पसंद करता हूं ..
सेबस्टियन ब्लाक

यह थोड़ा गड़बड़ है। आप हमेशा पहले सेटप्टूल से सेटअप आयात करने की कोशिश कर सकते हैं, अन्यथा डिस्टिलिट्स के साथ जाएं और चेतावनी प्राप्त करें। यदि यह पीपल में है, तो हो सकता है, आप "बहुत सारी खुली फाइलों" के कारण समाप्त हो जाएं क्योंकि सेटप्टूल के ठीक से बंद नहीं होने के कारण भी (डेबियन पर, 1024 के डिफ़ॉल्ट ulimit -n के साथ): bugs.pypy.org/issue878
fiorix

1
मेरा जवाब देखें - जहां तक ​​मैं बता सकता हूं, यह सेटपूलों में सिर्फ एक सीधा बग है। उपयोगकर्ता कुछ भी गलत नहीं कर रहा है, setuptools है।
ncoghlan

यह अप्रत्यक्ष रूप से मेरे प्रश्न का उत्तर देता है: मुझे चलाने के परिणामस्वरूप त्रुटि मिली pip install pendulum==1.4.4। रनिंग pip install setuptools --upgradeने त्रुटि साफ़ की।
थ्रू अवे अकाउंट

32

यह मेरी Google खोज पर पहला परिणाम था, लेकिन इसका कोई जवाब नहीं था। मैंने पाया कि अपग्रेडेशन ने मेरे लिए समस्या को हल कर दिया (और अच्छे उपाय के लिए पाइप)

pip install --upgrade pip
pip install --upgrade setuptools

आशा है कि यह अगले व्यक्ति को इस लिंक को खोजने में मदद करता है!


इसने इसे मेरे लिए भी हल कर दिया। (पायथॉन 3.4, कोशिश कर रहा है pip3 install neovim-remote।)
माइकल इल्स

इसने मेरे लिए काम किया। पायथन 2.7.16 पर mako स्थापित करने की कोशिश कर रहा था। एक समान अज्ञात वितरण विकल्प मिला। पिप ठीक था लेकिन 40.6.2 से सेटपूलस 41.0.1 हो गया। तब माको ने ए-ओके लगाया।
मैक्स याफे

18

ध्यान ! ध्यान ! आगे इम्परफेक्ट जवाब। पायथन ब्रह्मांड में पैकेजिंग की स्थिति पर "नवीनतम मेमो" प्राप्त करने के लिए, यह काफी विस्तृत निबंध पढ़ें ।

मैं अभी इस समस्या में भाग गया हूं जब ansible बनाने / स्थापित करने की कोशिश कर रहा हूं। समस्या यह है कि distutils वास्तव में install_requires का समर्थन नहीं करता है । सेप्टुपूलस को बंदर-पैच डिस्टिलिट्स -ऑन-द-फ्लाई चाहिए, लेकिन ऐसा नहीं होता है, शायद इसलिए कि सेटपूलों की आखिरी रिलीज 2009 से 0.6c11 है, जबकि डिस्टुटिल्स एक कोर पायथन प्रोजेक्ट है।

इसलिए मैन्युअल रूप से सेटटॉपटूल स्थापित करने के बाद भी-0.6c11-py2.7.egg रनिंग सेटअपहोम केवल डिस्टिल्ट डिस्ट्रोक्स को चुनता है, न कि साइट-पैकेज / सेटपूल / से।

इसके अलावा सेटपूल्ट्स डॉक्यूमेंटेशन ez_setup और डिस्टुटिल्स का उपयोग करने के संकेत देता है ।

हालाँकि, सेटपूल को स्वयं आजकल वितरित करके प्रदान किया जाता है, और सेटअप का स्वाद () install_requires का समर्थन करता है।


1
डाउनवोट किया गया है, क्योंकि इस उत्तर में कुछ चीजों के रूप में कुछ कीटाणुशोधन और भ्रम हैं। उदाहरण के लिए, ez_setup.py, setuptools के लिए एक बूटस्ट्रैप इंस्टॉलर है और ऐसा कुछ नहीं है जो "डिस्टुटिल्स" के बजाय "का उपयोग करेगा"। अधिकांश PyPI पैकेज "बस गलत" नहीं हैं।
इगुआनाटुत

1
@ इगुआनाउत, उत्तर की समीक्षा के लिए धन्यवाद; मैंने इसे संपादित किया है।
PAStheLoD

ओह शांत, धन्यवाद। मैं उस मामले में फिर से उठाउंगा :) Nick Coghlan का निबंध जिसे आपने लिंक किया है, मैंने अपने सहकर्मियों के साथ साझा किया है इससे पहले कि वे इस सामान के चारों ओर अपने सिर को लपेटने की कोशिश करें।
इगुआनाउत

मार्च 2013 में चीजों की स्थिति के बारे में महान निबंध। एक प्रश्न ... लेखक कहता है: " setuptoolsऔर distributeपरियोजनाएं एक साथ वापस विलय की प्रक्रिया में हैं, लेकिन विलय अभी तक पूरा नहीं हुआ है (मैं इस निबंध को जल्द से जल्द अपडेट करूंगा।" वह बदल जाता है)। " क्या किसी को पता है कि 2019 तक अब तक किन चीजों की स्थिति है? पाइथन 2.7 के जीवन की समाप्ति की तारीख जल्दी आने के साथ, बहुत सारे अजगर पैकेज अपडेट और पुन: पैकेजिंग की प्रक्रिया में होंगे।
त्रिनिट्रॉनएक्स

16

मैं एक पर हूँ MAC अजगर के साथ 2.7.11। मैं अत्यंत सरल और सीधी परियोजनाएँ बनाने के साथ रहा हूँ, जहाँ मेरी एकमात्र आवश्यकता यह है कि मैं चला सकता हूँ python setup.py install, और setup.pyसेटअप कमांड का उपयोग कर सकता हूँ , आदर्श रूप से डिस्टुटिल्स से। वहाँ वास्तव में कोई अन्य आयात या कोड 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: उपयोगकर्तावार्ता: अज्ञात वितरण विकल्प: 'entry_points' चेतावनियाँ () संदेश)

यदि मैं निम्न में आयात (और कुछ नहीं ) बदलता हूं :

from distutils.core import setup
import setuptools  # noqa

चेतावनियाँ दूर हो जाती हैं।

ध्यान दें कि मैं उपयोग नहीं कर रहा हूं setuptools, बस इसे आयात करने से व्यवहार में बदलाव आता है कि यह चेतावनी नहीं देता है। मेरे लिए, यह वास्तव में चौंकाने वाला अंतर है जहां कुछ परियोजनाएं मैं उन चेतावनियों का उपयोग कर रहा हूं, और कुछ अन्य नहीं करते हैं।

स्पष्ट रूप से, बंदर-पैचिंग का कुछ रूप चल रहा है, और यह प्रभावित होता है कि आयात किया जाता है या नहीं। इस समस्या पर शोध करने वाले सभी लोगों के लिए शायद यह स्थिति नहीं है, लेकिन जिस संकीर्ण वातावरण में मैं काम कर रहा हूं, यह वह उत्तर है जिसकी मुझे तलाश थी।


यह अन्य (सामुदायिक) टिप्पणी के अनुरूप है, जो कहती है कि डिस्टल्यूट्स को सेटपाउटफूल को बंद करना चाहिए, और यह कि उन्हें एन्सिबल स्थापित करते समय समस्या थी। प्रतीत होता है कि अतीत में सेटपूल के बिना इंस्टॉल की अनुमति देने की कोशिश की गई थी, और फिर उस पर वापस चला गया।

https://github.com/ansible/ansible/blob/devel/setup.py

बहुत सारा सामान हवा में है ... लेकिन अगर आप एक सरल परियोजना के लिए एक सरल उत्तर की तलाश कर रहे हैं, तो आपको शायद बस सेटटॉपल्स आयात करना चाहिए।


1
जोड़ना import setuptoolsभी चमत्कारिक ढंग से अजगर 3.5 के साथ ubuntu 16.04 पर मेरे लिए इस मुद्दे को हल।
कुरूपन

8

यह डिस्टुटिल्स से एक चेतावनी है, और यह संकेत है कि आपके पास सेटप्टूल नहीं हैं। इसे http://pypi.python.org/pypi/setuptools से इंस्टॉल करने से चेतावनी को हटा दिया जाएगा।


32
setuptools स्थापित है। अभी भी चेतावनी है।
टायलर लॉन्ग

आप काफी सही हैं, मुझे यह त्रुटि पाइथन 2.6.6 में मिली है, भले ही सेटपूल या डिस्ट्रीब्यूट स्थापित हो। अगर मैं २. try.२ के साथ कोशिश करूँ तो यह समाप्त हो गया है।
बजे फ्रेड्रिक हेस्टर

4
मुझे अजगर 2.7.3
केल्विन चेंग

2
यह मेरे लिए था: wget bootstrap.pypa.io/ez_setup.py -O - ​​|
सूडो

धन्यवाद, @radtek, कि मेरे लिए भी काम किया। शायद आप अपनी टिप्पणी को एक उत्तर में बना सकते हैं?
एस्टीस

4
sudo apt-get install python-dev  # for python2.x installs
sudo apt-get install python3-dev  # for python3.x installs

यह किसी भी लापता हेडर को स्थापित करेगा। इसने मेरी समस्या हल कर दी


4

निष्कर्ष में :

distutilsका समर्थन नहीं करता install_requiresया entry_points, setuptoolsकरता है।

केवल सुविधाओं का उपयोग करने के लिए सेटअप सेटअपfrom distutils.core import setup में परिवर्तन करें या अपने सेटअप को पुनःचेक करें ।from setuptools import setupdistutils

मैं यहाँ आया क्योंकि मुझे एहसास नहीं entry_pointsथा कि यह केवल एक setuptoolsविशेषता है।

यदि आप यहाँ मुझे पसंद setuptoolsकरने के लिए परिवर्तित करना distutilsचाहते हैं:

  1. setup.pyinstall_requires से निकालें और बस आवश्यकताओं का उपयोग करेंpip
  2. परिवर्तन entry_pointsकरने के लिए scripts( डॉक ) और refactor किसी भी पर निर्भर मॉड्यूल entry_pointsshebangs और एक प्रवेश बिंदु के साथ पूर्ण स्क्रिप्ट किया जाना है।

मैं समझने की कोशिश कर रहा हूं कि अनुशंसित पैकेज क्या है। आप लिखते हैं "केवल डिस्टुटिल्स फीचर्स का उपयोग करें" भी "सेटप्टूल को डिस्टुटिल में बदलें", लेकिन यह भी बताएं कि "एंट्री_प्वाइंट्स केवल सेटपूल की सुविधा थी", थोड़ा विरोधाभासी लगता है?
क्रिसिनटाउन

2

जहां तक ​​मैं बता सकता हूं, यह सेटपूलों में एक बग है जहां यह मानक लाइब्रेरी में बेस क्लास तक कॉल करने से पहले सेटप्टूल के विशिष्ट विकल्पों को नहीं हटा रहा है: https://bitbucket.org/pypa/setuptools/issue/29 / से बचने-userwarnings उत्सर्जित-जब-बुला

यदि आपके पास एक बिना शर्त import setuptoolsहै setup.py(जैसा कि यदि आपको सेटप्टूल विशिष्ट विकल्पों का उपयोग करना चाहिए), तो यह तथ्य यह नहीं है कि स्क्रिप्ट विफल हो रही है यह ImportErrorइंगित करता है कि सेटप्टोल्स ठीक से स्थापित है।

आप चेतावनी को इस प्रकार लिख सकते हैं:

python -W ignore::UserWarning:distutils.dist setup.py <any-other-args>

यदि आप बिना शर्त आयात का उपयोग करते हैं तो केवल यह करें कि अगर असफलता पूरी तरह से असफल हो जाए तो :)

(पोस्ट-मर्जर सेटपॉल्स रेपो से चेकआउट में मैं यही व्यवहार देख रहा हूं, यही वजह है कि मुझे विश्वास है कि यह सिस्टम कॉन्फिगर समस्या के बजाय सेटअप बग है। मुझे उम्मीद है कि प्री-मर्ज डिस्ट्रीब्यूट में भी यही समस्या होगी)


0

मैंने अब इसे Python2.7 का उपयोग करते हुए विरासत के औजारों में देखा है, जहाँ एक बिल्ड (एक डॉकफेराइल की तरह) एक अनपिनड निर्भरता स्थापित करता है, उदाहरण के लिए पाइस्टेस्ट। पायटेस्ट ने पायथन 2.7 का समर्थन छोड़ दिया है, इसलिए आपको संस्करण <नया पैकेज जारी करने की आवश्यकता हो सकती है।

या बुलेट को काटें और उस ऐप को पायथन 3 में बदल दें यदि यह व्यवहार्य है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.