2010-01-01 13 views
6

मैं एक टेक्स्ट एडिटर और आईपीथन का उपयोग कर एक पायथन पैकेज विकसित कर रहा हूं। प्रत्येक बार जब मैं कोई मॉड्यूल कोड बदलता हूं तो मुझे इसका परीक्षण करने के लिए दुभाषिया को पुनरारंभ करना होगा। यह एक दर्द है क्योंकि कक्षाएं मैं एक संदर्भ पर भरोसा कर रहा हूं जिसे प्रत्येक रीलोड पर फिर से स्थापित करने की आवश्यकता है।हर बदलाव के बाद दुभाषिया को पुनरारंभ किए बिना पाइथन मॉड्यूल/पैकेज कैसे विकसित करें?

मैं reload() समारोह के बारे में पता कर रहा हूँ, लेकिन इस frowned upon प्रतीत होता है (यह भी है क्योंकि यह से निकाल दिया गया है एक अंतर्निहित अजगर 3.0 में) और इसके अलावा यह शायद ही कभी काम करता है के बाद से मॉड्यूल लगभग हमेशा कई संदर्भों की है।

मेरा सवाल है - पाइथन मॉड्यूल/पैकेज विकसित करने का सबसे अच्छा/स्वीकार्य तरीका क्या है ताकि मुझे लगातार अपने दुभाषिया संदर्भ को फिर से स्थापित करने के दर्द से गुजरना पड़े?

एक विचार मैंने सोचा था कि एक मॉड्यूल चलाने के लिए if __name__ == '__main__': चाल का उपयोग कर रहा था ताकि कोड आयात नहीं किया जा सके। हालांकि यह मेरी मॉड्यूल फ़ाइलों के नीचे प्रासंगिक क्रूर (मेरे सेटअप के लिए विशिष्ट) का एक गुच्छा छोड़ देता है।

विचार?

उत्तर

2

IPython अनुमति देते हैं पुनः लोड जादू समारोह% रन देख करता iPython doc

या एक के तहत मॉड्यूल पुनरावर्ती dreloadd() फ़ंक्शन

बदली गई है, तो आप एक जटिल संदर्भ में यह संभव उसे बनाने के लिए है एक और मॉड्यूल? या एक वैश्विक चर जो चारों ओर रहना होगा के रूप में दुभाषिया

+0

लोड मॉड्यूल लोड करने के लिए% रन का उपयोग शानदार है, धन्यवाद! – Brendan

+0

'dreload() 'ध्वनि भी अच्छा लगता है लेकिन ऐसा लगता है कि यह Numpy के साथ समस्याओं में भाग लेता है - यह भी जो भी मैंने' बहिष्कृत 'कीवर्ड सूची में सेट किया है उसे अनदेखा कर रहा है ... – Brendan

+0

Numpy और' dreload() 'के साथ समस्या है यहां प्रलेखित https://bugs.launchpad.net/ipython/+bug/306805 – Brendan

0

को पुनः आरंभ नहीं है आप एक अजगर स्क्रिप्ट है जो आपके संदर्भ सेट बना सकते हैं और

python -i context-setup.py 


    -i  When a script is passed as first argument or the -c option is 
      used, enter interactive mode after executing the script or the 
      command. It does not read the $PYTHONSTARTUP file. This can be 
      useful to inspect global variables or a stack trace when a 
      script raises an exception. 
3

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

शायद आपको पाइथन के साथ ऐसा करने के विभिन्न तरीकों के बारे में पता है, मुझे लगता है कि इस दिशा में शुरू करने का सबसे आसान तरीका है कि आप दुभाषिया में डॉकस्ट्रिंग में जो कुछ भी करते हैं उसे कॉपी और पेस्ट करना है और निम्नलिखित को जोड़ें अपने मॉड्यूल के नीचे:

if __name__ == "__main__": 
    import doctest 
    doctest.testmod() 

आपका अनौपचारिक परीक्षण तो हर बार मॉड्यूल सीधे कहा जाता है दोहराया जाएगा। इसमें कई अन्य लाभ हैं। लेखन सिद्धांतों के बारे में अधिक जानकारी के लिए doctest docs देखें।

+0

* स्वचालित * परीक्षणों (उदाहरण के लिए py.test या unittest मॉड्यूल के साथ) का उपयोग करके विकास को चलाने की सलाह एक +10 है, लेकिन मैं इसे केवल एक दे सकता है। :( –

+0

यह भी एक अच्छा विचार है। हालांकि, इस शुरुआती चरणों में एपीआई इस समय तेजी से बदल रहा है। यह ऐसा कुछ है जिसे मैं आम तौर पर पैकेज विकास में शामिल करता हूं। – Brendan

1

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

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

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