2010-01-18 7 views
9

कुछ उपयोगी पायथन पैकेज पीपीआई पर टूट जाते हैं, और एकमात्र स्वीकार्य संस्करण एक संशोधन नियंत्रण प्रणाली में एक विशेष संशोधन है। क्या इसे setup.py मेंक्या एक पाइथन पैकेज किसी अन्य पायथन पैकेज के विशिष्ट संस्करण नियंत्रण संशोधन पर निर्भर करता है?

requires = 'svn://example.org/useful.package/[email protected]' में व्यक्त किया जा सकता है?

उत्तर

12

आप दो काम करने की जरूरत है। सबसे पहले, सही संस्करण आप चाहते हैं, उदाहरण के लिए आवश्यकता होती है:

install_requires = "useful.package==1.9dev-r1234" 

और फिर एक dependency_links सेटिंग निर्दिष्ट करने में शामिल हैं, जहां यह पता लगाने के लिए:

dependency_links = ["svn://example.org/useful.package/[email protected]#egg=useful.package-1.9dev-r1234"] 

ध्यान दें कि dependency_links URL के संस्करण #egg= हिस्सा चाहिए वास्तव में मिलान करें जो आपने install_requires में निर्दिष्ट किया है; यह एक साथ दो टुकड़ों को जोड़ता है।

क्या होता है कि setuptools लिंक पर # टैग टैग देखता है और पैकेज के उस सटीक संस्करण के लिए URL को उपलब्ध डाउनलोड यूआरएल के रूप में सहेजता है। फिर, जब यह बाद में उस आवश्यकता को हल करने का प्रयास करता है, तो उसे उस सटीक एसवीएन यूआरएल को डाउनलोड करना चाहिए।

(हालांकि, ध्यान दें कि इस के लिए करने के लिए वास्तव में काम, लक्षित SVN संशोधन वास्तव में उस नाम और संस्करण के साथ एक अंडे का निर्माण करने की है। अन्यथा, अपने निर्भरता कार्यावधि में असफल हो जायेगी! तो, यह वास्तव में केवल तभी काम करता है जिस पैकेज पर आप निर्भर हैं, उसके डिफ़ॉल्ट बिल्ड संस्करण संख्याओं में एसवीएन संशोधन टैग का उपयोग करता है।)

+1

हाँ, यह सामान्य मामले में/वास्तव में/काम नहीं करता है ... मैं अभी पाइप का उपयोग करता हूं। – joeforker

+0

"find_links" वास्तव में "निर्भरता_लिंक" नहीं होना चाहिए? –

+0

धन्यवाद, गेब्रियल। मैंने इसे ठीक कर दिया है। –

2

तुम सच में एक और पैकेज की एक अस्पष्ट संस्करण की आवश्यकता है, और वहाँ अन्य संस्करणों के साथ क्या करने के लिए कोई रास्ता नहीं है, तो आप बस अपने खुद के साथ पैकेज के उस संस्करण वितरित करने के लिए चाहते हो सकता है। यदि आवश्यक हो तो यह सुनिश्चित करने के लिए कि आपका संस्करण उपयोग किया गया है, इसे अपने नामस्थान में रखें।

1

आप विशिष्ट संस्करणों के पैकेज जारी कर सकते हैं, लेकिन आपको उन्हें एक साथ वितरित करना होगा। मानक पायथन के साथ स्वचालित रूप से डाउनलोड करने का कोई तरीका नहीं है।

हालांकि, आप बिल्डआउट का उपयोग कर सकते हैं और buildout.cfg बना सकते हैं जिससे पर्यावरण को दोहराना संभव हो जाता है। यदि आप mr.developer जैसे एक्सटेंशन का उपयोग करते हैं तो यह विशिष्ट संशोधनों को देख और स्थापित कर सकता है।

http://pypi.python.org/pypi/zc.buildout http://pypi.python.org/pypi/mr.developer

2

मैं पता लगा नहीं किया है setup.py से इस संदर्भ के लिए कैसे लेकिन pip एक सरल आवश्यकताओं फ़ाइल के साथ अजगर पैकेज के विशिष्ट संशोधन की जाँच कर सकते हैं। requires.txt नामक एक आवश्यकता फ़ाइल के साथ, pip install -r requires.txt उस फ़ाइल में सूचीबद्ध सभी संकुल (और उनकी निर्भरता) स्थापित करेगा।

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

requires.txt:

-e hg+file:///home/me/my-private-project#egg=myproject 
-e hg+http://bitbucket.org/ianb/[email protected]#egg=WebOb 
-e svn+http://svn.sqlalchemy.org/sqlalchemy/[email protected]#egg=SQLAlchemy 
-e svn+http://svn.zope.org/repos/main/z3c.saconfig/[email protected]#egg=z3c.saconfig 
## The following requirements were added by pip --freeze: 
APScheduler==1.01 
simplejson==2.0.9 
... (many more) 
+0

क्या आप वास्तव में अपनी निर्भरताओं का संपादन योग्य रूप चाहते हैं? –

+0

कभी-कभी मैं करता हूं। – joeforker

संबंधित मुद्दे