यह एक जटिल और भ्रमित मुद्दा है। मैं जो विधि देता हूं वह मॉड्यूल को फिर से लोड करेगा और दिए गए संदर्भ में चर को रीफ्रेश करेगा। हालांकि, यदि आपके पास दिए गए मॉड्यूल पर तारांकित आयात का उपयोग करके एकाधिक मॉड्यूल हैं तो यह विधि खत्म हो जाएगी क्योंकि वे अपडेट करने के बजाय अपने मूल मान बनाए रखेंगे। आम तौर पर, एक मॉड्यूल को फिर से लोड करने के लिए भी एक ऐसा कुछ है जो आपको आरईपीएल के साथ काम करने के अपवाद के साथ नहीं करना चाहिए। मॉड्यूल कुछ ऐसा नहीं है जो गतिशील होना चाहिए। आपको आवश्यक अपडेट प्रदान करने के अन्य तरीकों पर विचार करना चाहिए।
import sys
def reload_starred(module_name, context):
if context in sys.modules:
context = vars(sys.modules[context])
module = sys.modules[module_name]
for name in get_public_module_variables(module):
try:
del context[name]
except KeyError:
pass
module = reload(module)
context.update(get_public_module_variables(module))
def get_public_module_variables(module):
if hasattr(module, "__all__"):
return dict((k,v) for (k,v) in vars(module).items()
if k in module.__all__)
else:
return dict((k,v) for (k,v) in vars(module).items()
if not k.startswith("_"))
उपयोग:
reload_starred("my_module", __name__)
reload_starred("my_module", globals())
reload_starred("my_module", "another_module")
def function():
from my_module import *
...
reload_starred("my_module", locals())
एक और कारण तारांकित आयात का उपयोग नहीं है यही कारण है कि। – vaultah
शायद आप sys मॉड्यूल के साथ कोशिश कर सकते हैं। लोड किए गए सभी मॉड्यूल सूचीबद्ध करें (sys.moduled.keys()) और फिर उन पर आयात निष्पादित करें (क्लीनअप के बाद -> sys.modules.clear()) –
@vaultah: मुझे समझ में नहीं आता कि आप क्या कहने की कोशिश कर रहे हैं। वह तारांकित आयात खराब विचार है इसलिए यही कारण है कि पाइथन आपको उन तारांकित आयातों को फिर से लोड करने का कोई तरीका नहीं देता है, भले ही पायथन पहली बार तारांकित आयात की अनुमति देता है। क्या इस विषमता के लिए एक अनिवार्य कारण है? –