2012-09-26 12 views
5

मैं कोड प्रबंधन के लिए गिट का उपयोग करके एक django परियोजना विकसित कर रहा हूं। मुख्य परियोजना में कई ऐप्स हैं जो सबमिड्यूल के रूप में हैं, जिनमें से प्रत्येक स्वतंत्र रूप से उपयोग किया जा सकता है, इस प्रकार प्रत्येक अलग गिट रेपो में हैं। ये सभी ऐप्स विकास में हैं, और कम से कम एक अन्य परियोजना से फोर्क किया गया है। ये ऐप्स पाइप के माध्यम से स्थापित किए जा सकते हैं, जब रेपो क्लोन करते हैं, तो रूट में setup.py और README और आगे होते हैं, फिर सबफ़ोल्डर में वास्तविक ऐप।एक गिट प्रोजेक्ट में एकाधिक पाइप पैकेज कैसे विकसित करें?

यदि मैं ऐप इंस्टॉल करता हूं, तो कार्य कोड गिट प्रबंधन के तहत फ़ोल्डर में एक अलग स्थान पर होगा, इसलिए हर बार जब मैं कोड बदलता हूं तो मुझे pip install (या कोई और पाइप है) इसके लिए कमांड?) कोड को अपडेट करने के लिए जहां पाइथन इसे ढूंढ रहा है

मैं उपरोक्त स्थिति को रोकने के लिए pip install -e का उपयोग कर सकता हूं। हालांकि, मुझे प्रत्येक ऐप को अलग फ़ोल्डर्स में क्लोन करने की आवश्यकता होगी: मैं केवल project/apps में ऐप्स को क्लोन नहीं कर सकता हूं और project/apps/foo और project/apps/bar है क्योंकि वे दोनों project/apps में अपना setup.py ड्रॉप करने का प्रयास करेंगे। इसके बजाय मुझे project/apps/foo में foo क्लोन करने की आवश्यकता होगी लेकिन फिर वास्तविक कोड project/apps/foo/foo में है। यह मुझे बदसूरत और बहुत django-ish के रूप में हमला करता है।

क्या मैं ऐसा करने का प्रयास कर रहा हूं जो करने के लिए कुछ और सुंदर तरीका है?

+0

मैं थोड़ा उलझन में हूं - आपको या तो इन ऐप्स को 'पीपी' के साथ इंस्टॉल करना चाहिए या सीधे ऐप्स को क्लोन करना और उनका उपयोग करना चाहिए। लगभग हर मामले में, आप या तो एक सबमिशन या पीआईपी (शायद एक आवश्यकता फ़ाइल के माध्यम से) का उपयोग करेंगे, लेकिन दोनों नहीं। –

उत्तर

3

मुझे लगता है कि आप वास्तव में उपयोग करना चाहते हैं requirements file (गिट सबमिड्यूल का उपयोग करने के बजाए) आपके प्रोजेक्ट के लिए virtualenv के साथ।

आवश्यकताओं फ़ाइलों के साथ, आप किसी दिए गए शाखा से सीधे रेपोस क्लोन कर सकते हैं या करने, उदाहरण के लिए:

requirements.txt:

Django==1.4.1 
South==0.7.6 
git+git://github.com/fabric/fabric#egg=Fabric 
git+git://github.com/toastdriven/[email protected]#egg=django-tastypie 

तो फिर तुम pip install -r requirements.txt चला सकते हैं।

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

+0

और यदि मैं उन ऐप्स में परिवर्तन करता हूं तो मैं उन्हें वापस जिथब पर धक्का दे सकता हूं? – askvictor

+0

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

+0

यही वह है जो 'अंडा' करता है: जब मुझे 'डीजेंगो-टेस्टपी' के अपने कांटा का उपयोग करने की आवश्यकता होती है, उदाहरण के लिए, मैं अपनी कांटा पर इंगित करने के लिए आवश्यकता फ़ाइल में लाइन बदलता हूं, लेकिन 'अंडा' को छोड़ देता हूं; यह पैकेज को जो भी संस्करण आप चाहते हैं उसे प्रभावी ढंग से अद्यतन करता है। –

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