के रूप में पूछा, सबसे अच्छा तुम कर सकते हो
>>> from project.models.user import *
>>> import project # get module reference for reload
>>> reload(project.models.user) # reload step 1
>>> from project.models.user import * # reload step 2
बेहतर और क्लीनर होगा यदि आप बल्कि import *
कर (जो यह करने के लिए सही तरीके से लगभग कभी नहीं है) की तुलना में, सीधे उपयोगकर्ता मॉड्यूल का इस्तेमाल किया है । तो यह केवल
>>> from project.models import user
>>> reload(user)
यह वही होगा जो आप चाहते हैं। लेकिन, यह बहुत अच्छा नहीं है। यदि आपको वास्तव में मॉड्यूल को फिर से लोड करने की ज़रूरत है, तो मुझे पूछना होगा: क्यों?
मेरा संदेह (समान प्रश्न पूछने वाले लोगों के साथ पिछले अनुभव का बैक अप) यह है कि आप अपने मॉड्यूल का परीक्षण कर रहे हैं। मॉड्यूल का परीक्षण करने के कई तरीके हैं, और इंटरैक्टिव दुभाषिया में हाथ से ऐसा करना सबसे खराब तरीकों में से एक है। अपने सत्रों में से किसी एक को फ़ाइल में सहेजें और त्वरित सुधार के लिए doctest
का उपयोग करें। वैकल्पिक रूप से, इसे एक प्रोग्राम के रूप में लिखें और python -i
का उपयोग करें। हालांकि, वास्तव में एकमात्र महान समाधान unittest
मॉड्यूल का उपयोग कर रहा है।
यदि ऐसा नहीं है, तो उम्मीद है कि यह कुछ बेहतर है, बदतर नहीं। वास्तव में reload
का कोई अच्छा उपयोग नहीं है (वास्तव में, यह 3.x में हटा दिया गया है)। यह प्रभावी ढंग से काम नहीं करता है - आप मॉड्यूल को फिर से लोड कर सकते हैं लेकिन पिछले संस्करणों से बचे हुए छोड़ सकते हैं। यह सभी प्रकार के मॉड्यूल पर भी काम नहीं करता है - फिर से लोड होने पर एक्सटेंशन मॉड्यूल ठीक से फिर से लोड नहीं होंगे, या कभी-कभी भयानक तोड़ देंगे।
इंटरैक्टिव दुभाषिया में इसका उपयोग करने का संदर्भ आपके द्वारा किए जा रहे कार्यों के अनुसार बहुत सारे विकल्प नहीं छोड़ता है, और वास्तविकतम समाधान क्या होगा।इसके बाहर, कभी-कभी लोग प्लगइन इत्यादि को लागू करने के लिए reload()
का उपयोग करते थे। यह सबसे अच्छा खतरनाक है, और अक्सर exec
(आह बुराई क्षेत्र जिसे हम स्वयं पाते हैं) या एक पृथक प्रक्रिया का उपयोग करके अलग-अलग किया जा सकता है।
स्रोत
2010-03-28 20:53:06
+1: वास्तव में पुनः लोड करने का कोई अच्छा उपयोग नहीं है। –
मैं इस प्रश्न को खोजने के लिए क्या कर रहा हूं, क्या मैं JSON से आयातित डेटा संरचना का पता लगाने के लिए कंसोल का उपयोग कर रहा हूं। मैं अपने टेक्स्ट एडिटर में कुछ फ़ंक्शंस रखने के लिए "रीलोड" का उपयोग करना चाहता हूं जो विभिन्न तरीकों से संरचना को पार करता है, उन्हें संपादित करता है, फिर कंसोल से बाहर निकले बिना उन्हें फिर से चालू करता है। फिर भी, यदि पाइथन इसे स्पष्ट रूप से समर्थन नहीं दे सकता है, तो "बचे हुए" को हटाने में असमर्थता के कारणों के लिए, मुझे लगता है कि मुझे ऐसा करना गलत होना चाहिए; उत्तर के लिए +1 +1 जो मुझे वैसे भी करने देता है, हालांकि। –
+1 मुझे यह दिखाने के लिए कि मुझे वास्तव में वास्तव में, ठीक ट्यूनिंग के लिए भी हाथ से दुभाषिया में चीजों को करने के बजाय परीक्षण लिखना चाहिए। यह भविष्य के गैर-रिग्रेशन परीक्षण के लिए भी उपयोगी होगा। –