2016-12-21 14 views
6

मैं setup.py में extras_require() और install_requires() के बीच अंतर को समझने के लिए कोशिश कर रहा हूँ, लेकिन यह नहीं मिल सका। दोनों का उपयोग पायथन निर्भरताओं को स्थापित करने के लिए किया जाता है, लेकिन उनके बीच क्या अंतर है?extras_require() और install_requires() setup.py में क्या अंतर है?

उत्तर

1

मैं आधिकारिक उपयोग के बारे में सुनिश्चित नहीं हूँ, लेकिन मैं extras_require() का उपयोग सशर्त निर्भरता निर्दिष्ट करने के लिए।

मेरे मामले में -

extras_require={":python_version<'3.5'": ["scandir"]} 

सैद्धांतिक रूप से, इस install_requires() खुद के माध्यम से उपलब्ध होना चाहिए, लेकिन यह केवल काम करता है के रूप में यह संस्करण X.XX शुरू करने चाहिए (कई दावों के रूप में जो करने के लिए संस्करण यह सही हो रही शुरू होता है) setuptools

यह लेख यह अच्छी तरह बताते हैं: Conditional Python Dependencies

3

setuptools documentation के अनुसार, "अतिरिक्त" (अपनी परियोजना के वैकल्पिक सुविधाओं) तार या तार की सूची के

extras_require
एक शब्दकोश मानचित्रण नाम यह निर्दिष्ट करना कि उन सुविधाओं का समर्थन करने के लिए अन्य वितरण स्थापित किए जाने चाहिए।

और

install_requires
एक स्ट्रिंग या निर्दिष्ट करने के लिए क्या अन्य वितरण जब यह एक है स्थापित करने की आवश्यकता तार की सूची।

Declaring “Extras” (optional features with their own dependencies) पर अनुभाग इस पर बताते हैं:

कभी कभी एक परियोजना "सुझाए गए" है निर्भरता, कि इस परियोजना के सभी उपयोगों के लिए आवश्यक नहीं हैं। उदाहरण के लिए, एक परियोजना वैकल्पिक पीडीएफ उत्पादन करता है, तो ReportLab स्थापित किया गया है, और reStructuredText समर्थन की पेशकश कर सकते हैं docutils स्थापित किया गया है, तो। इन वैकल्पिक विशेषताओं को "अतिरिक्त" कहा जाता है, और setuptools आपको उनकी आवश्यकताओं को भी परिभाषित करने की अनुमति देता है। इस तरह, अन्य परियोजनाओं है कि इन वैकल्पिक सुविधाओं की आवश्यकता होती है अतिरिक्त आवश्यकताओं को मजबूर कर सकते हैं स्थापित होने के लिए, उनके install_requires में वांछित अतिरिक्त नामकरण से।

सबसे बड़ा अंतर यह है कि extras_require में आवश्यकताओं केवल जरूरत के रूप में स्थापित कर रहे हैं:

ये आवश्यकताएं स्वचालित रूप से स्थापित नहीं किया जाएगा जब तक कि एक और पैकेज वांछित शामिल करके उन पर निर्भर करता (प्रत्यक्ष या परोक्ष) " अतिरिक्त परियोजना नाम के बाद वर्ग ब्रैकेट में अतिरिक्त "। (या अतिरिक्त EasyInstall कमांड लाइन पर एक आवश्यकता कल्पना में सूचीबद्ध किया गया है।)

तो संक्षेप में प्रस्तुत करने के लिए:

  • तो निर्भरता आवश्यक है अपनी परियोजना को चलाने के लिए, install_requires में रख । वे हमेशा स्थापित किया जाएगा।
  • यदि आपकी परियोजना में वैकल्पिक विशेषताएं जो निर्भरता जोड़ती हैं, तो उन निर्भरताओं को extras_require में रखें। उन निर्भरता स्थापित नहीं किया जाएगा जब तक कि सुविधा उपयोगकर्ता या किसी अन्य पैकेज से के लिए कहा जाता है।
संबंधित मुद्दे