পাইথন ৩.৪ এবং তারপরে, আপনি সরাসরি উত্স ফাইল থেকে আমদানি করতে পারেন (ডকুমেন্টেশনের লিঙ্ক) । এটি সহজ সমাধান নয়, তবে আমি এই উত্তরটি সম্পূর্ণতার জন্য অন্তর্ভুক্ত করছি।
এখানে একটি উদাহরণ। প্রথমে ফাইলটি আমদানি করা হবে, নাম foo.py
:
def announce():
print("Imported!")
উপরের ফাইলটি আমদানি করে এমন কোড, ডকুমেন্টেশনের উদাহরণ দ্বারা ভারীভাবে অনুপ্রাণিত হয়েছে:
import importlib.util
def module_from_file(module_name, file_path):
spec = importlib.util.spec_from_file_location(module_name, file_path)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
foo = module_from_file("foo", "/path/to/foo.py")
if __name__ == "__main__":
print(foo)
print(dir(foo))
foo.announce()
আউটপুট:
<module 'foo' from '/path/to/foo.py'>
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!
নোট করুন যে ভেরিয়েবলের নাম, মডিউলটির নাম এবং ফাইলের নাম মেলে না। এই কোডটি এখনও কাজ করে:
import importlib.util
def module_from_file(module_name, file_path):
spec = importlib.util.spec_from_file_location(module_name, file_path)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
baz = module_from_file("bar", "/path/to/foo.py")
if __name__ == "__main__":
print(baz)
print(dir(baz))
baz.announce()
আউটপুট:
<module 'bar' from '/path/to/foo.py'>
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!
প্রোগ্রামিয়ালি আমদানি করার মডিউলগুলি পাইথন ৩.১ এ প্রবর্তিত হয়েছিল এবং আপনাকে মডিউলগুলি কীভাবে আমদানি করা হয় তার উপর আরও নিয়ন্ত্রণ দেয়। আরও তথ্যের জন্য ডকুমেন্টেশন দেখুন।