मेरा सुझाव है कि IPython autoreload एक्सटेंशन का उपयोग करें ।
./manage.py shell
In [1]: %load_ext autoreload
In [2]: %autoreload 2
और अब से सभी आयातित मॉड्यूल मूल्यांकन से पहले ताज़ा हो जाएंगे।
In [3]: from x import print_something
In [4]: print_something()
Out[4]: 'Something'
In [5]: print_something()
Out[5]: 'Something else'
यह भी काम करता है अगर कुछ %load_ext autoreload
आदेश से पहले आयात किया गया था ।
./manage.py shell
In [1]: from x import print_something
In [2]: print_something()
Out[2]: 'Something'
In [3]: %load_ext autoreload
In [4]: %autoreload 2
In [5]: print_something()
Out[5]: 'Something else'
%aimport
कमांड और 3 ऑटोरेलोड रणनीतियों के साथ कुछ आयातों को ताज़ा करने से रोकना संभव है :
% autoreload
- सभी मॉड्यूल को पुन: लोड करें (सिवाय उन लोगों को छोड़कर, जिनका%% मासपोर्ट) अब स्वचालित रूप से है।
% ऑटोरेलोड 0
- स्वचालित पुनः लोड करना अक्षम करें।
% ऑटोरेलोड 1
- पायथन कोड को निष्पादित करने से पहले हर बार% aimport के साथ आयातित सभी मॉड्यूल पुनः लोड करें।
% ऑटोरेलोड 2
- पायथन कोड को निष्पादित करने से पहले हर बार सभी मॉड्यूल (% उद्देश्य से बाहर रखे गए लोगों को छोड़कर) को फिर से लोड करें।
% aimport
- सूची मॉड्यूल जिन्हें स्वचालित रूप से आयात किया जाना है या आयात नहीं किया जाना है।
% टस टप फ
- इंपोर्ट मॉड्यूल 'फू' और इसे% ऑटोरैलोएड 1 के लिए ऑटोरेलिड होने के लिए चिह्नित करें
% उद्देश्य -फू
- मार्क मॉड्यूल 'फू' को ऑटोरेलिड नहीं होना चाहिए।
यह आमतौर पर मेरे उपयोग के लिए अच्छा काम करता है, लेकिन कुछ गुफाएं हैं:
- कोड ऑब्जेक्ट्स को प्रतिस्थापित करना हमेशा सफल नहीं होता है: क्लास में @property को साधारण विधि या सदस्य चर के लिए विधि में बदलने से समस्याएँ उत्पन्न हो सकती हैं (केवल पुरानी वस्तुओं में)।
- हटाए जाने से पहले एक मॉड्यूल से हटाए गए कार्य (जैसे बंदर-पैचिंग के माध्यम से) को अपग्रेड नहीं किया जाता है।
- C एक्सटेंशन मॉड्यूल को फिर से लोड नहीं किया जा सकता है, और इसलिए इसे ऑटोरेलिड नहीं किया जा सकता है।