পাইথনে "রেম্পোর্ট" মডিউলটি কীভাবে কোড আমদানির পরে পরিবর্তন করা যায়


92

আমার আছে একটি foo.py

def foo():
    print "test"

আইপিথনে আমি ব্যবহার করি:

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

তারপরে আমি এতে পরিবর্তন করেছি foo():

def foo():
    print "test changed"

আইপিথনে, আহ্বানের ফলাফল এখনও 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

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

reload(foo)

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

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

23
আসলে, কেবল "পুনরায় লোড (foo)" - এটির পুনরায় বৈশিষ্ট্য দেওয়ার প্রয়োজন নেই
jsbueno

4
আমি এটি কাজ পেতে পারে না। আমি টাইপ এররটি উপস্থাপন করছি: পুনরায় লোড করুন () যুক্তিটি মডিউল হওয়া উচিত
বুড়াক

4
@ বুর্ক, আপনি যে কোনও যুক্তিটি মডিউলটিতে যাচ্ছেন তা কি reload?. যেমন আপনার import fooআগেই করা উচিত
জন লা রো

27
মনে রাখবেন যে আপনি যদি করেন from foo import *বা from foo import bar, চিহ্নটি fooসংজ্ঞায়িত হয় না। আপনার import sysতখন reload(sys.modules['foo'])বা সম্ভবত প্রয়োজনreload(sys.modules[bar.__module__])
ড্রেভিকো

4
দয়া করে পাইথন ২.x এর মৃত্যু হোক এবং পাইথন ২.x সমর্থন করা বন্ধ করুন! পাইথন ২.x পাইথনক্লোর.অর্গের অবসর গ্রহণের একটি কাউন্টডাউন ।
মার্টিজন ভ্যান ওয়েজেল

66

জিনিবলারের উত্তর ছাড়াও:

এটি পাইথন 3 এ পরিবর্তিত হয়েছে:

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

@ অ্যানোডব যেমনটি উল্লেখ করেছেন, পাইথন ৩.৪-এর impপক্ষে হ্রাস করা হয়েছে importlib:

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

4
কেবলমাত্র একটি ছোট সিডিনোট: পাইথন ৩.x এর পরবর্তী সংস্করণগুলিতে "ইমপ্লিবি" এর পক্ষে "ইমপ" অবমূল্যায়ন করা হয়েছে। যদিও একইভাবে কাজ করে।
onnodb

55

আইপিথন 3 এর অটোরলোড বৈশিষ্ট্যটি ঠিক ঠিক কাজ করে।

আমি ওয়েবপৃষ্ঠা থেকে প্রকৃত উদাহরণ ব্যবহার করছি। প্রথমে 'অটোরলোড' বৈশিষ্ট্যটি লোড করুন।

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

তারপরে আপনি যে মডিউলটি পরীক্ষা করতে চান তা আমদানি করুন:

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

একটি সম্পাদক এ foo.py খুলুন এবং 43_ এ ফিরে কিছু_ ফাংশন পরিবর্তন করুন

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

আপনি সরাসরি ফাংশনটি আমদানি করলে এটিও কাজ করে।

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

43-এ ফিরে আসার জন্য কিছু_পরিবর্তন করুন।

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

4
ফু আমদানি থেকে কিছু_ফিউশন, জুপিটারল্যাব পাইথনের অধীনে কাজ করছেন না 3..7.৩
রবার্ট নওক

7

আপনি যদি এটি স্বয়ংক্রিয়ভাবে ঘটতে চান তবে সেখানে অটোরেড মডিউলটি আইপিথনের সাথে আসে।


ফু আমদানি থেকে কিছু_ফিউশন, জুপিটারল্যাব পাইথনের অধীনে কাজ করছেন না 3..7.৩
রবার্ট নওক

@ রবার্ট নওক আমি এতে প্রবেশ করি, তবে এটি তখন কার্যকর হয়েছিল যখন আমি আমার কোডটিতে "foo" ছাড়াই কেবল "আমদানি কিছু_ফঞ্চন" করার চেষ্টা করেছি যখন foo আমদানি থেকে কিছু_ফংশানটি আসল করার পরে।
মাইকেল জাজেপানিয়াক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.