2011-11-28 12 views
68

क्या किसी को पीपीपीआई पैकेज के python setup.py install निष्पादित करते समय इस चेतावनी का सामना करना पड़ता है?pypi उपयोगकर्ता चेतावनी: अज्ञात वितरण विकल्प: 'install_requires'

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

+0

पाइथन पैकेज बनाते समय setup.py में 'इंस्टॉल \ _requires' जोड़ना संभव है [https://stackoverflow.com/questions/9810603/adding-install-requires-to-setup- py-when-making-a-python-package) – tripleee

+0

@ ट्रिपली शायद, लेकिन इस सवाल से पहले पूछा गया था। –

+0

[प्रश्न आयु एक माध्यमिक चिंता है] (https://meta.stackoverflow.com/questions/251938/should-i-flag-a-question-as-duplicate-if-it-has-received-better-answers) लेकिन मेरे पास कोई भी मजबूत राय नहीं है। यदि आप डुप्लिकेट नामांकन को दूसरी तरफ जाने के लिए चाहते हैं, तो शायद दृश्यता के लिए एक [मेटा] प्रश्न बनाएं। मेरे लिए व्यक्तिगत रूप से, दूसरे प्रश्न के स्वीकृत उत्तर ने मुझे और मदद की, क्योंकि यह अधिक प्रत्यक्ष और केंद्रित है। ऐसा लगता है कि आपने कभी भी इन उत्तरों में से कोई भी स्वीकार नहीं किया है, इसलिए यह एक कारक है जिसे आप वास्तव में बदल सकते हैं। – tripleee

उत्तर

8

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

+26

setuptools स्थापित है। अभी भी चेतावनी है। –

+0

आप बिल्कुल सही हैं, मुझे यह त्रुटि Python 2.6.6 में मिलती है भले ही setuptools या वितरण स्थापित हो। अगर मैं 2.7.2 के साथ प्रयास करता हूं तो यह चला गया है। –

+3

मुझे इस समस्या को अजगर में 2.7.3 –

14

ध्यान! ध्यान! आगे प्रभावशाली जवाब। पाइथन ब्रह्मांड में पैकेजिंग की स्थिति पर "नवीनतम ज्ञापन" प्राप्त करने के लिए, this fairly detailed essay पढ़ें।

उत्तरदायी बनाने/स्थापित करने का प्रयास करते समय मैंने अभी इस समस्या में भाग लिया है। समस्या यह प्रतीत होती है कि वास्तव में distutils doesn't support install_requires। Setuptools should बंदर-पैच दूर-द-फ्लाई पर, लेकिन ऐसा नहीं होता है, संभवतः क्योंकि सेटअपटॉल्स की अंतिम रिलीज 200 9 से 0.6c11 है, जबकि distutils एक कोर पायथन परियोजना है।

तो सेटअपtools-0.6c11-py2.7.egg को मैन्युअल रूप से स्थापित करने के बाद भी setup.py.py dist.pyils dist.py को चुनता है, और साइट-पैकेज/setuptools/से कोई नहीं।

इसके अलावा setuptools प्रलेखन ez_setup का उपयोग करने के लिए संकेत देता है और distutils नहीं।

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

+1

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

+1

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

+0

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

60

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

एक और तरीका अपने setup.py में setuptools से सेटअप आयात करना है, लेकिन यह मानक नहीं है और आपके पैकेज का उपयोग करने वाले सभी को सेटअपtools इंस्टॉल करना है।

+3

कहें कि मैं 'पीपी' का उपयोग करना चाहता हूं, तो मैं' setup.py' फ़ाइल कैसे चला सकता हूं यदि मैं केवल जगह में एक्सटेंशन बनाना चाहता हूं? –

+8

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

+0

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

2

जहां तक ​​मेरा बता सकते हैं, इस setuptools में एक बग जहां यह मानक पुस्तकालय में आधार वर्ग के लिए ऊपर कॉल करने से पहले setuptools विशिष्ट विकल्प को हटाने नहीं है: आप बिना शर्त import setuptools है, तो https://bitbucket.org/pypa/setuptools/issue/29/avoid-userwarnings-emitted-when-calling

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

इस प्रकार आप चेतावनी मौन कर सकते हैं:

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

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

का उपयोग कर रहा हूँ मैं पोस्ट विलय सेटअपtools repo से चेकआउट में यह वही व्यवहार देख रहा है, यही कारण है कि मुझे विश्वास है कि यह सिस्टम कॉन्फ़िगरेशन समस्या के बजाय सेटअप सेटअप बग है।मुझे उम्मीद है कि प्री-मर्ज वितरण में एक ही समस्या होगी)

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

यह किसी भी अनुपलब्ध शीर्षलेख स्थापित करेगा। इसने मेरी समस्या हल की