अजगर को फिर से "रिइम्पोर्ट" करने के लिए कैसे आयात के बाद कोड को बदला जाना चाहिए


92

मेरे पास एक foo.py

def foo():
    print "test"

IPython में मैं का उपयोग करें:

In [6]:  import foo
In [7]:  foo.foo()
test

फिर मैंने इसे बदल दिया foo():

def foo():
    print "test changed"

IPython में, आह्वान के लिए परिणाम अभी भी है test:

In [10]:  import foo
In [11]:  foo.foo()
test

तब मैं उपयोग करता हूं:

In [15]: del foo
In [16]:  import foo
In [17]:  foo.foo()
test

मैं foo.pycउसी फ़ोल्डर में हटाता हूं जो foo.pyमौजूद है, लेकिन फिर भी कोई भाग्य नहीं है।

क्या मुझे पता है कि रनटाइम में अपडेटेड कोड को फिर से कैसे निकालना है?


जवाबों:


121

अजगर के लिए 2.x

reload(foo)

पायथन 3.x के लिए

import importlib
import foo #import the module here, so that it can be reloaded.
importlib.reload(foo)

23
वास्तव में, बस "रीलोड (फू)" - इसे फिर से विशेषता की कोई आवश्यकता नहीं है
jsbueno

2
मैं यह काम नहीं कर सका। मैं टाइप कर रहा हूं टाइपरर: रीलोड () तर्क मॉड्यूल होना चाहिए
बुरक

2
@Burak, क्या आप reloadकिसी मॉड्यूल को पास कर रहे हैं ? जैसे। आप import fooपहले से कर रहे हैं
जॉन ला Rooy

27
ध्यान दें कि यदि आपने किया है from foo import *या from foo import bar, प्रतीक fooपरिभाषित नहीं किया गया है। आपको import sysतब reload(sys.modules['foo'])या शायदreload(sys.modules[bar.__module__])
drevicko

3
कृपया, अजगर को २.x मरने दें और पायथन २.x का समर्थन करना बंद कर दें! अजगर की सेवानिवृत्ति के लिए एक उलटी गिनती 2.x pythonclock.org
Martijn van Wezel

66

ज्ञानी के जवाब के अलावा:

यह पायथन 3 में बदल गया:

>>> import imp
>>> imp.reload(foo)

जैसा कि @onnodb बताते हैं, पायथन 3.4 के impपक्ष में पदावनत किया गया है importlib:

>>> import importlib
>>> importlib.reload(foo)

5
बस एक छोटी सी बात है: पायथन 3.x के बाद के संस्करणों में, "आयात" को "इम्पोर्टिब" के पक्ष में चित्रित किया गया है। वैसे ही काम करता है, हालांकि।
onnodb

56

IPython3 का ऑटोरैलोएड फीचर सही काम करता है।

मैं वेबपेज से वास्तविक उदाहरण का उपयोग कर रहा हूं। सबसे पहले 'ऑटोरेलोएड' फीचर लोड करें।

In []: %load_ext autoreload
In []: %autoreload 2

फिर उस मॉड्यूल को आयात करें जिसे आप परीक्षण करना चाहते हैं:

In []: import foo
In []: foo.some_function()
Out[]: 42

एक संपादक में foo.py खोलें और 43 को वापस करने के लिए some_function बदलें

In []: foo.some_function()
Out[]: 43

यदि आप फ़ंक्शन को सीधे आयात करते हैं तो यह भी काम करता है।

In []: from foo import some_function
In []: some_function()
Out[]: 42

43 लौटाने के लिए some_function में बदलाव करें।

In []: some_function()
Out[]: 43

1
फू आयात से some_function, जुपीटरलैब पायथन 3.7.3 के तहत काम नहीं कर रहा है
रॉबर्ट नोवाक

7

यदि आप चाहते हैं कि यह स्वचालित रूप से हो, तो ऑटोरिलैड मॉड्यूल है जो iPython के साथ आता है।


फू आयात से कुछ_फंक्शन, जुपीटरलैब पायथन 3.7.3 के तहत काम नहीं करना
रॉबर्ट नोवाक

@ रॉबर्ट नोवाक मैं इसमें भाग गया, लेकिन यह तब काम किया जब मैंने "कोड से" बिना "कुछ" आयात किए "कोशिश की" बाद में "फू से" बाद में अपने कोड में मूल के बाद से कुछ आयात करें।
माइकल स्ज़ेपेपनिअक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.