इसके चेहरे पर, ऐसा लगता है कि requirements.txt
और setup.py
मूर्खतापूर्ण डुप्लिकेट हैं, लेकिन यह समझना महत्वपूर्ण है कि जबकि रूप समान है, इच्छित फ़ंक्शन बहुत अलग है।
एक पैकेज लेखक का लक्ष्य, जब निर्भरता को निर्दिष्ट करता है, तो यह कहना है कि "जहां भी आप इस पैकेज को स्थापित करते हैं, ये अन्य पैकेज हैं जिनकी आपको जरूरत है, ताकि इस पैकेज के लिए काम किया जा सके।"
इसके विपरीत, परिनियोजन लेखक (जो एक ही समय में एक ही व्यक्ति हो सकता है) के पास एक अलग काम है, इसमें वे कहते हैं "यहां उन पैकेजों की सूची है जिन्हें हमने एक साथ इकट्ठा किया है और परीक्षण किया है और जिन्हें अब मुझे स्थापित करने की आवश्यकता है"।
पैकेज लेखक विभिन्न प्रकार के परिदृश्यों के लिए लिखता है, क्योंकि वे अपने काम को उन तरीकों से उपयोग करने के लिए डाल रहे हैं जिनके बारे में वे नहीं जानते हैं, और यह जानने का कोई तरीका नहीं है कि उनके पैकेज के साथ क्या पैकेज स्थापित किए जाएंगे। एक अच्छा पड़ोसी होने और अन्य पैकेजों के साथ निर्भरता संस्करण संघर्ष से बचने के लिए, उन्हें निर्भरता संस्करणों की एक विस्तृत श्रृंखला के रूप में निर्दिष्ट करने की आवश्यकता है जो संभवतः काम कर सकते हैं। यह क्या है install_requires
में setup.py
है।
तैनाती लेखक एक बहुत ही अलग, बहुत विशिष्ट लक्ष्य के लिए लिखता है: एक स्थापित एप्लिकेशन या सेवा का एक एकल उदाहरण, किसी विशेष कंप्यूटर पर स्थापित। किसी परिनियोजन को ठीक से नियंत्रित करने के लिए, और सुनिश्चित करें कि सही संकुल का परीक्षण किया और तैनात किया गया है, परिनियोजन लेखक को स्थापित करने के लिए हर पैकेज का सटीक संस्करण और स्रोत-स्थान निर्दिष्ट करना होगा, जिसमें निर्भरता और निर्भरता निर्भरता शामिल है। इस कल्पना के साथ, एक तैनाती को कई मशीनों पर बार-बार लागू किया जा सकता है, या एक परीक्षण मशीन पर परीक्षण किया जा सकता है, और तैनाती लेखक को भरोसा हो सकता है कि हर बार एक ही पैकेज तैनात किया जाता है। यह क्या requirements.txt
करता है।
तो आप यह देख सकते हैं, जबकि वे दोनों पैकेज और संस्करणों की एक बड़ी सूची की तरह दिखते हैं, इन दोनों चीजों में बहुत अलग काम हैं। और निश्चित रूप से यह मिश्रण करना और इसे गलत करना आसान है! लेकिन इस बारे में सोचने का सही तरीका यह है कि requirements.txt
सभी विभिन्न setup.py
पैकेज फाइलों में आवश्यकताओं के अनुसार "प्रश्न" का "उत्तर" है । इसे हाथ से लिखने के बजाय, यह अक्सर setup.py
वांछित पैकेजों के सेट में सभी फाइलों को देखने के लिए पाइप को बताकर उत्पन्न होता है , ऐसे पैकेजों का एक सेट खोजें, जो यह सोचते हैं कि सभी आवश्यकताओं को फिट बैठता है, और फिर, उन्हें स्थापित करने के बाद, "फ्रीज करें "एक पाठ फ़ाइल में संकुल की सूची (यह वह जगह है जहाँ से pip freeze
नाम आता है)।
तो takeaway:
setup.py
अभी भी काम कर रहे हैं जो सबसे कम संभव निर्भरता संस्करणों की घोषणा करनी चाहिए। इसका काम यह कहना है कि कोई विशेष पैकेज किसके साथ काम कर सकता है।
requirements.txt
एक परिनियोजन प्रकटन है जो संपूर्ण इंस्टॉलेशन कार्य को परिभाषित करता है, और इसे किसी एक पैकेज से बंधा हुआ नहीं माना जाना चाहिए। इसका काम तैनाती काम करने के लिए सभी आवश्यक पैकेजों की एक विस्तृत सूची घोषित करना है।
- क्योंकि इन दो चीजों में मौजूदा के लिए ऐसी अलग-अलग सामग्री और कारण हैं, बस एक को दूसरे में कॉपी करना संभव नहीं है।
संदर्भ:
install_requires
पैकेज पर काम करने के लिए आवश्यक पैकेजों पर निर्भरता की घोषणा करने के लिए उपयोग किया जाता है और पैकेज के डेवलपर द्वारा उपयोग किया जाता है, जबकिrequirements.txt
इसका उपयोग वातावरण की स्थापना को स्वचालित करने के लिए किया जाता है, जो अतिरिक्त सॉफ़्टवेयर स्थापित करने और संस्करण को पिन करने की अनुमति देता है और इसका उपयोग sysadminsing द्वारा किया जाता है पैकेज। उनकी भूमिका और लक्षित दर्शक काफी भिन्न होते हैं, इसलिए उन्हें ओपी इच्छाओं की तरह संयोजित करने की कोशिश करना एक वास्तविक डिजाइन की गलती है।