NameError: नाम 'पुनः लोड' परिभाषित नहीं है


81

मैं अजगर 3.2.2 का उपयोग कर रहा हूं। जब मैं एक साधारण कार्यक्रम लिखता हूं, तो मैं समस्या से मिलता हूं।

>>> reload(recommendations)
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    reload(recommendations)
NameError: name 'reload' is not defined

मैं इसे कैसे करूं?


9
एक "सरल कार्यक्रम" शायद जरूरत नहीं है reload।
— Wooble

मैं "पुनः लोड (सिफारिशें)", "सिफारिशें" (एबीसी) का उपयोग करना चाहता हूं। लेकिन यह सिफारिशें नहीं मिल रही हैं
— माइंडहैक

1
@MindHacks यदि आपने अनुशंसाएँ आयात नहीं की हैं, तो आप इसे पुनः लोड नहीं करते हैं, आप इसे आयात करते हैं। import recommendations। आपको ऐसा क्यों लगा कि आपको उपयोग करने की आवश्यकता है reload()?
— गारेथ लेटी

गैर-लैटिन पात्रों के साथ फाइलों को पढ़ने के लिए @geoffspear अधिकांश "सरल कार्यक्रम" reload, दुर्भाग्य से।
— gent

@GennaroTedesco: यदि आप कुछ भयानक चीज के बारे में सोच रहे हैं जो आपने पढ़ा है जिसमें रीलोड (sys) शामिल है, तो ऐसा कभी न करें। बस करो with open('file', 'r', encoding='utf-8') as f: do_whatever। सरल कार्यक्रमों में, या वास्तव में किसी भी अजगर कार्यक्रम में मॉड्यूल को फिर से लोड करने की आवश्यकता नहीं है ।
— Wooble

जवाबों:


159

आप शायद चाहते थे importlib.reload()।

from importlib import reload

पायथन 2.x में, यह एक बिलिन था , लेकिन 3.x में, यह importlibमॉड्यूल में है।

ध्यान दें कि reload()दुभाषिया के बाहर का उपयोग करना आम तौर पर अनावश्यक है, आप यहां क्या करने की कोशिश कर रहे थे?


धन्यवाद, यह काम करता है। लेकिन अगर मैं पुनः लोड का उपयोग करना चाहता हूं, तो मुझे हर बार फ़ाइल आयात करना चाहिए?
— माइंडहैक

@MindHacks: आप किस "फाइल" के बारे में बात कर रहे हैं?
— स्वेन मार्नाच

@MindHacks: impएक मॉड्यूल है, एक फ़ाइल नहीं है। (यह दुभाषिया कोर में बनाया गया है और किसी भी फ़ाइल के अनुरूप नहीं है।) और हां, इसका उपयोग करने के लिए imp.reloadआपको आयात करना होगा imp, लेकिन यह कोई बड़ी बात नहीं है।
— स्वेन मार्नाच

@MindHacks आपको आयात करने की आवश्यकता है impजहाँ आप उपयोग करते हैं reload(), हाँ। इसी तरह नामकरण काम करता है। आप किसी भी तरह इंटरएक्टिव प्रॉम्प्ट के बाहर एक मॉड्यूल को फिर से लोड क्यों करना चाहेंगे?
— गारेथ लैटी

3
धन्यवाद, लेकिन आह। वे शेल को अधिक उपयोगी बनाने की कोशिश क्यों नहीं कर रहे हैं?
— थॉमस अहले

12

@ गैरेथ लेटी के जवाब के लिए एक अपडेट। impपायथन 3.4 में मूल्यह्रास किया गया था। अब आप चाहते हैं importlib.reload()।

from importlib import reload

11

कोशिश करो importlib.reload।

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

from importlib import reload

reload(module_name)

0

जैसा कि दूसरों ने कहा है, आपको importlib.reload(module)या तो पहले की जरूरत है या कुछ बिंदुओं पर from importlib import reload। लेकिन आप from importlib import reloadएक आरंभीकरण फ़ाइल में छिपा सकते हैं । सुनिश्चित करें कि PYTHONSTARTUPआपके शेल में परिभाषित किया गया है। उदाहरण के लिए,

export PYTHONSTARTUP=$HOME/python/startup.py

~/.bash_profileयदि आपके शेल को बैश किया गया है, और आप अपने पायथन फ़ाइलों को कहाँ संग्रहीत करते हैं, इसके आधार पर, आपको जोड़ने के लिए एक उचित लाइन हो सकती है । (यदि आप इन निर्देशों का पालन कर रहे हैं, तो इस बिंदु पर एक नई टर्मिनल विंडो शुरू करें ताकि लाइन निष्पादित हो।) फिर आप लाइन डाल सकते हैं।

from importlib import reload

में ~/python/startup.pyहै और यह अपने आप हो जाएगा। (फिर, यदि आप साथ चल रहे हैं, तो इस बिंदु पर एक नया अजगर सत्र शुरू करें।) यह सिर्फ एक समस्या को हल करने के लिए थोड़ा जटिल लग सकता है, लेकिन यह एक ऐसी चीज है जिसे आपको केवल एक बार करना है, और फिर हर समान समस्या के लिए। "मैं चाहता हूं कि अजगर हमेशा ऐसा करेगा" की तर्ज पर, एक बार जब आप इसका हल ढूंढ लेंगे तो आप इसे ~/python/startup.pyभूल सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.