यदि आप libA (dev) पर libt-dev का प्रयोग करते हैं जो libA (स्थिर) पर निर्भर करता है, तो आप वास्तव में libA-dev का परीक्षण नहीं कर रहे हैं क्योंकि यह उत्पादन वातावरण में व्यवहार करेगा। वास्तव में libA-dev का परीक्षण करने का एकमात्र तरीका पूर्ण डुबकी लेना और libT को libA-dev पर निर्भर करना है। यदि यह आपके यूनिट परीक्षणों को तोड़ देता है तो यह एक अच्छी बात है - यह आपको दिखा रहा है कि क्या तय किया जाना चाहिए।
यदि आपके पास यूनिट परीक्षण नहीं है, तो यह उन्हें बनाने के लिए समय है (स्थिर libA और libT पहले का उपयोग करके!)।
मैं "संस्करण नियंत्रण प्रणाली" (उदाहरण के लिए bzr, hg, svn, git) का उपयोग करने की अनुशंसा करता हूं। फिर आप अपनी परियोजना की शाखाएं बना सकते हैं, "स्थिर" और "देव"।
शाखा देवा पर काम करने के लिए, आप पहली बार चल पाएंगे
export PYTHONPATH=/path/to/devA
यकीन PYTHONPATH वातावरण चर अन्य शाखाओं को शामिल नहीं करने से, आप का आश्वासन दिया रहे हैं अजगर सिर्फ मॉड्यूल आप इच्छा उपयोग कर रहा है।
जब समय dev>> स्थिर से कोड मर्ज करने का समय आता है, तो संस्करण नियंत्रण सॉफ़्टवेयर भी ऐसा करने का एक आसान तरीका प्रदान करेगा।
संस्करण नियंत्रण आपको भी साहसी होने की अनुमति देता है - बड़े बदलावों की कोशिश करना डरावना नहीं है। अगर चीजें काम नहीं करती हैं, तो वापस करना बहुत आसान है। उस और पायथनपथ चाल के बीच, आप हमेशा ज्ञात, काम करने वाले कोड पर वापस जाने में सक्षम होते हैं।
यदि आप उपरोक्त महसूस करते हैं तो बस आपके लिए काम नहीं करेगा, और आपको libA-dev का परीक्षण करने के लिए libT-which-निर्भर-libA का उपयोग करना होगा, तो आपको सभी मॉड्यूल का नाम बदलना होगा और संशोधित करना होगा libA-dev और libA के बीच स्पष्ट अलगाव करने के लिए सभी आयात विवरण। उदाहरण के लिए, यदि libA में मॉड्यूलA.py नामक एक मॉड्यूल है, तो इसे मॉड्यूल__dev.py का नाम दें।
आदेश
rename -n 's/^(.*)\.py/$1_dev.py/' *.py
सभी * .py फ़ाइलों के लिए "_dev" जोड़ देगा। ("-n" ध्वज के साथ नाम बदलें कमांड आपको केवल समकालीन नामकरण दिखाएगा। "-n" को वास्तव में इसके साथ जाने के लिए हटाएं।)
नाम वापस जाने के लिए,
rename -n 's/^(.*)_dev\.py/$1.py/' *.py
चलाने इसके बाद आप कोड के भीतर moduleA_dev को moduleA के सभी संदर्भ को बदलना होगा। > "ModuleA_dev" - आदेश
find /path/to/LibA-dev/ -type f -name '*.py' -exec sed -i 's/moduleA/moduleA_dev/g' {} \;
LIBA-देव में हर * .py फ़ाइल, बदल रहा है "moduleA" को बदल देगा।
इस आदेश से सावधान रहें। यह खतरनाक है, क्योंकि यदि आपके पास मॉड्यूलब नामक एक चर है तो इसे मॉड्यूलए_डेवीबी का नाम दिया जाएगा, जबकि आप जो वास्तव में चाहते थे वह मॉड्यूलAB_dev हो सकता है।
इस परिवर्तन (ऊपर चेतावनी के अधीन),
find /path/to/LibA-dev/ -type f -name '*.py' -exec sed -i 's/moduleA_dev/moduleA/g' {} \;
वापस जाने के लिए एक बार जब आप नामस्थान अलग है, तो आप एक सर्कुलर निर्भरता टूट गए हैं। एक बार जब आप संतुष्ट हो जाते हैं तो आपका libA-dev अच्छा है, आप मॉड्यूल ए_dev.py -> moduleA.py और मॉड्यूल ए_डेवी -> मॉड्यूलए के सभी संदर्भों को आपके कोड में बदल सकते हैं।
स्थिर और विकास कोड की वांछित कॉन्फ़िगरेशन बनाने के लिए आप अपने सामान्य स्रोत-कोड प्रबंधन टूल का उपयोग क्यों नहीं कर सकते? शाखाओं के साथ एसवीएन में यह सब कुछ करता है। और कोई प्रोग्रामिंग नहीं। ऐसा करने के लिए आप एसवीएन शाखाओं का उपयोग क्यों नहीं कर सकते? –
यह नहीं देख सका कि किस शाखाई को इसके साथ क्या करना है, इसलिए मैंने सवाल थोड़ा स्पष्ट कर दिया, उम्मीद कर रही है कि इससे आपको यह समझने में मदद मिलेगी कि मैं क्या करने की कोशिश कर रहा हूं। – abyx