কম্পিউটার

পাইথনে পরম এবং আপেক্ষিক আমদানি


অনেক সময় যখন আমরা পাইথন কোড তৈরি করি তখন আমরা দেখতে পাই যে আমাদের অন্য পাইথন ফাইল বা প্যাকেজ থেকে কোড অ্যাক্সেস করতে হবে। এটি তখনই হয় যখন আপনাকে সেই অন্য পাইথন ফাইল বা প্যাকেজটি আপনার বর্তমান কোডে আমদানি করতে হবে। তাই এটি অর্জন করার সোজা পথ হল আপনার বর্তমান পাইথন প্রোগ্রামের উপরে নিচের বিবৃতিটি লেখা।

import package_name or module_name
or
from pacakge_name import module_name/object_name

যখন উপরের বিবৃতিটি পার্স করা হয় তখন দোভাষী নিম্নলিখিতটি করে।

  • দোভাষী ইতিমধ্যেই ইম্পোর্ট করা হয়েছে এমন সমস্ত মডিউলের ক্যাশে নামগুলি সন্ধান করবে৷ sys.modules-এ এই ক্যাশে মডিউলের নাম।

  • উপরের ধাপে না পাওয়া গেলে দোভাষী বিল্ট-ইন মডিউলের একটি তালিকায় এটি অনুসন্ধান করবে। এই মডিউলগুলি পাইথন স্ট্যান্ডার্ড লাইব্রেরির অংশ৷

  • যদি এটি এখনও উপরের ধাপ-2-এ পাওয়া না যায়, তাহলে দোভাষী sys.path-এ সংজ্ঞায়িত ডিরেক্টরিগুলির একটি তালিকায় প্যাকেজ বা মডিউলের নামগুলি অনুসন্ধান করবে যেখানে বর্তমান ডিরেক্টরিটি অনুসন্ধান করা প্রথম ডিরেক্টরি হিসাবে রয়েছে৷

  • উপরের যেকোনো ধাপে এগুলোকে আমদানি করা মডিউল হিসেবে খুঁজে পাওয়ার পর, প্যাকেজ বা মডিউলের নাম বর্তমান প্রোগ্রামের স্থানীয় সুযোগে আবদ্ধ।

  • যদি প্যাকেজ বা মডিউলটি খুঁজে না পাওয়া যায়, তাহলে ModuleNotFoundError উত্থাপিত হয়৷

আমদানি সম্পর্কে কিছু নিয়ম।

সেই স্টেটমেন্টগুলি ব্যবহার করে ফাইলের উপরে ইম্পোর্ট স্টেটমেন্ট উল্লেখ করা উচিত। যে ক্রমে আমদানির উল্লেখ করতে হবে তা নিম্নরূপ।

  • পাইথনের স্ট্যান্ডার্ড লাইব্রেরি মডিউল

  • তৃতীয় পক্ষের মডিউল থেকে আমদানি করুন

  • স্থানীয় অ্যাপ্লিকেশন থেকে আমদানি করুন

পরম আমদানি

এই ধরনের আমদানিতে, আমরা আমদানি করার জন্য প্যাকেজ/মডিউল/ফাংশনের সম্পূর্ণ পথ নির্দিষ্ট করি। একটি ডট(.) ডাইরেক্টরি কাঠামোর জন্য স্ল্যাশ(/) গতিতে ব্যবহৃত হয়।

একটি প্যাকেজের জন্য নিম্নলিখিত ডিরেক্টরি কাঠামো বিবেচনা করুন৷

python_project_name/packageA/moduleA1.py
python_project_name/packageA/moduleA2.py

এছাড়াও, ধরে নেওয়া যাক moduleA2 এর একটি ফাংশনের নাম myfunc আছে। যখন আমরা আমাদের বর্তমান পাইথন প্রোগ্রামে সেই ফাংশনটি আমদানি করতে চাই, তখন পরম পথ ব্যবহার করে আমরা নিম্নলিখিত আমদানি বিবৃতিটি উল্লেখ করি৷

from packageA.moduleA2 import myfunc

পরম আমদানির বড় সুবিধা হল, এটি স্পষ্টভাবে নির্দেশ করে যে কোথায় আমদানি হচ্ছে অন্যদিকে কখনও কখনও এটি বেশ দীর্ঘ হতে পারে৷

আপেক্ষিক আমদানি

আপেক্ষিক আমদানিতে, আমরা আমদানি করা প্যাকেজের পথটি বর্তমান স্ক্রিপ্টের অবস্থানের সাথে সম্পর্কিত হিসাবে উল্লেখ করি যা আমদানি করা মডিউল ব্যবহার করছে৷

একটি বিন্দু বর্তমান অবস্থান থেকে একটি ডিরেক্টরি উপরে নির্দেশ করে এবং দুটি বিন্দু দুটি ডিরেক্টরি উপরে নির্দেশ করে।

একটি প্যাকেজের জন্য নিম্নলিখিত ডিরেক্টরি কাঠামো বিবেচনা করুন৷

python_project_name/packageA/moduleA1.py
python_project_name/packageB/moduleB1.py

ধরা যাক উপরের প্যাকেজ স্ট্রাকচারে মডিউলবি১-কে মডিউলএ১ আমদানি করতে হবে। তারপর আমদানি বিবৃতি হল:

from ..packageA import moduleA1

দুটি বিন্দু নির্দেশ করে যে মডিউলবি 1-এর অবস্থান থেকে, আমাদের python_project_name ডিরেক্টরিতে যেতে হবে এবং তারপর মডিউলএ1 পেতে প্যাকেজএ-তে যেতে হবে।

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


  1. CSS পরম এবং আপেক্ষিক ইউনিট বোঝা

  2. CSS পরম এবং আপেক্ষিক ইউনিট

  3. পাইথন পান্ডাসে গ্রুপ-বাই এবং সমষ্টি

  4. কিভাবে পাইথনে Matplotlib আমদানি করবেন?