নামError: পুনরায় লোডিং মডিউলটি নাম 'রিলোড' সংজ্ঞায়িত করা হয়নি


162

আমি পাইথন 3 এ ইতোমধ্যে আমদানি করা একটি মডিউল পুনরায় লোড করার চেষ্টা করছি I আমি জানি যে আপনাকে কেবল একবার আমদানি importকরতে হবে এবং কমান্ডটি আবার কার্যকর করা কিছু করবে না।

কার্যকর reload(foo)করা এই ত্রুটিটি দিচ্ছে:

Traceback (most recent call last):
    File "(stdin)", line 1, in (module)
    ...
NameError: name 'reload' is not defined

ত্রুটির অর্থ কী?

উত্তর:


239

reload পাইথন 2 এ একটি বিল্টিন, তবে পাইথন 3 এ নয়, তাই আপনি যে ত্রুটিটি দেখছেন তা প্রত্যাশিত।

পাইথন 3-তে আপনাকে যদি সত্যই মডিউলটি পুনরায় লোড করতে হয় তবে আপনার ব্যবহার করা উচিত:

  • importlib.reload পাইথন ৩.৪ এবং তারপরের জন্য
  • imp.reloadপাইথন 3.0.০ থেকে ৩.৩ এর জন্য (পাইথন ৩.৪-এর থেকে অবহেলিত importlib)

37
এই উত্তরটি এটিকে শোনাচ্ছে যে পাইথন 3 এ মডিউলটি পুনরায় লোড করা খারাপ this এর পিছনে কী ভাবছে?
এবিএম

11
রিলোডিং সর্বদা সমস্যাযুক্ত। আপডেটগুলি মডিউল ভেরিয়েবলগুলি পুনরায় লোড করা হচ্ছে, তবে পুরানোগুলি মুছে ফেলবে না, তাই আপনি যদি কোনওটির নাম পরিবর্তন করেন তবে পুরানো নামটি উপস্থিত থাকবে। আপনি যদি শ্রেণীর সংজ্ঞা পরিবর্তন করেন তবে বিদ্যমান বস্তুর এখনও পুরানো প্রকার থাকবে। অবশেষে, কিছু মডিউলগুলি আমদানির সময় কোড চালায় যা দুবার চালানোর জন্য ডিজাইন করা হয়নি। সুতরাং পুনরায় লোড করা এড়ানো ভাল, তবে প্রায়শই খুব সুবিধাজনক।
ইভান

13
আমি বলব যে এটি প্রায়শই সমস্যাযুক্ত তবে সবসময় নয় । নিশ্চিত হওয়াতে, আমি মনে করি যে reloadকোনও স্ক্রিপ্টে লেখার জন্য বৈধ ব্যবহারের ঘটনাগুলি খুব বিরল, এবং যারা এই ধরণের অন্ধকারকে নিযুক্ত করে তারা এই মন্তব্যটি পড়ার সম্ভাবনা কম। তবে, আপনি যদি কোনও মডিউল বিকাশ করছেন এবং এটি ইন্টারেক্টিভভাবে পরীক্ষা করার জন্য একটি আইপথন কনসোল ব্যবহার করছেন, তবে reloadসেই কাজের প্রবাহে আপনি সুবিধাজনক হতে পারেন। যেমন ইভান বলেছেন, যদিও আমদানি-সময় পার্শ্ব প্রতিক্রিয়াগুলি সন্ধান করুন। সাধারণভাবে, আমি reloadঅন্য কারও মডিউলগুলিকে আটকাতে বলব । reloadডিজাইনের সময় আপনার নিজের আইএনও বোঝা যায়।
টিম ডি

6
আমি আমার কাজের জন্য জুপিটার নোটবুক ব্যবহার করি এবং জিনিসগুলি পরিষ্কার রাখার জন্য, আমি এমন কাজ রাখি যার জন্য আমদানিযোগ্য প্যাকেজগুলির মধ্যে ন্যূনতম সংশোধন করা উচিত। যাইহোক, এই জিনিসগুলিকে মাঝে মাঝে সংশোধনগুলির প্রয়োজন হয়, এবং পুনরায় লোড করা একেবারে সঠিক জিনিস, যেহেতু আমার নোটবুক কার্নেলটি মেমরির গণনাগুলিতে ধারণ করে যা আক্ষরিকভাবে সমস্ত দিন গণনা করা হয়েছিল।
স্কট 16

সময় গ্রহণকারী কলগুলি যেমন ডাটাবেস ফাংশন সহ লাইব্রেরিগুলির সক্রিয় বিকাশের জন্য পুনরায় লোড করা জরুরী। যাইহোক, পুনরায় লোডিং মডিউলগুলির মধ্যে আপনি যে মুখ্য সমস্যার মুখোমুখি হতে পারেন তার মধ্যে একটি হ'ল সাজসজ্জারগুলির সাথে ফাংশনগুলি এখানে
আলেকজান্ডার ম্যাকফারলেন

82

>> পাইথন 3.4 এর জন্য:

import importlib
importlib.reload(module)

<= পাইথন ৩.৩ এর জন্য:

import imp
imp.reload(module)

পাইথন 2.x এর জন্য:

অন্তর্নির্মিত reload()ফাংশনটি ব্যবহার করুন ।

reload(module)

48
import imp
imp.reload(script4)

7
পাইথন ৩.৪ থেকে অবহেলিত - importlibপরিবর্তে ব্যবহার করুন।
মার্ক আমেরিকা

39

পূর্বের লিখিত উত্তরের উপর প্রসারণ করতে, আপনি যদি একক সমাধান চান যা পাইথন সংস্করণ 2 এবং 3 জুড়ে কাজ করবে, আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

try:
    reload  # Python 2.7
except NameError:
    try:
        from importlib import reload  # Python 3.4+
    except ImportError:
        from imp import reload  # Python 3.0 - 3.3

12

আমি নিম্নলিখিত স্নিপেটটি ব্যবহার করার পরামর্শ দিচ্ছি কারণ এটি অজগর সংস্করণে (প্রয়োজনীয় six) কাজ করে:

from six.moves import reload_module
reload_module(module)

2

পাইথন 2 এবং পাইথন 3 সামঞ্জস্যের জন্য, আপনি ব্যবহার করতে পারেন:

# Python 2 and 3
from imp import reload
reload(mymodule)

1
এটি পাইথন ৩.7 (এবং এর আগে) তে কাজ করে তবে @ অ্যালেক্স মার্তেলি নীচে লিখেছেন বলে চিত্রিত হয়েছে। 'সিক্স.মোভেস আমদানি পুনরায় লোড_মডিউল' থেকে অ্যালিয়োর উত্তরটি ব্যবহার করুন
চার্লস

2

আপনি যদি বাহ্যিক libs ব্যবহার করতে না চান, তবে একটি সমাধান হ'ল পাইথন 2 থেকে পুনরায় লোড পদ্ধতিটি পাইথন 3 এর জন্য নীচে হিসাবে পুনরায় তৈরি করুন। এটি মডিউলের শীর্ষে ব্যবহার করুন (অজগর 3.4+ ধরে)।

import sys
if(sys.version_info.major>=3):
    def reload(MODULE):        
        import importlib
        importlib.reload(MODULE)

আপনি যদি পাইথন ফাইলগুলি কনফিগারেশন ফাইল হিসাবে ব্যবহার করেন এবং অ্যাপ্লিকেশনটির পুনঃসূচনাগুলি এড়াতে চান তবে বিটিডাব্লু পুনরায় লোড করা খুব দরকার .....

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.