Skip to main content

পাইথনে মডিউল এবং প্যাকেজ কিভাবে কাজ করে ?

পাইথন মডিউল এবং প্যাকেজ

আজকে আমরা পাইথনের মডিউল ও প্যাকেজ সম্পর্কে জানার চেষ্টা করব । এবং এগুলো কিভাবে কাজ করে সেটা দেখব । আরও জানবো পাইথন কিভাবে তার মডিউল কে খুঁজে বের করে ।

মডিউল কি ?

যেকোনো সিঙ্গেল পাইথন ফাইল কে বলা হয় মডিউল । আমরা যেকোনো পাইথন ফাইল যেটা .py দিয়ে শেষ হয় সেটাকে আমরা যেকোনো পাইথন স্ক্রিপ্ট থেকে import করতে পারি । অনেক বড় প্রোগ্রাম কে ছোট ছোট অংশে ভাগ করার জন্য মডিউল আমাদের কে সাহায্য করে ।
মনে করি আমাদের arithmatic.py নামে একটা পাইথন ফাইল আছে । ফাইলটি আপনি এখন যে ডিরেক্টরিরে আছে সেই ডিরেক্টরিতেই থাকতে হবে । এবং এটার মধ্যে নিচের জিনিসগুলো আছে ।

এখন আমি যদি একই ডিরেক্টরিতে থাকি তবে এই arithmatic.py ফাইল কে নিচের মত করে import করতে পারব । এবং এর ফাংশন ও ভারিয়েবল কে ব্যবহার করতে পারব ।

প্যাকেজ কি ?

উপরে আমরা দেখলাম যে আমরা যদি কোন মডিউল কে অন্য একটা মডিউল থেকে import করতে চাই তবে মডিউল গুলো কে একই ডিরেক্টরিতে রাখতে হয় । এটা একটা সমস্যা । এই সমস্যা দূর করার জন্যই মূলত পাকেজিং সিস্টেম । এর মাধ্যমে আমরা আমাদের লেখা বিভিন্ন পাইথন মডিউল কে ভিন্ন ভিন্ন ডিরেক্টরির আন্ডারে রাখতে পারি । এবং সেগুলোকে আমাদের প্রয়োজন অনুসারে import করতে পারব ।

রিয়েল লাইফ সফটওয়্যারে আমারা দেখি যে বিভিন্ন .py ফাইল ভিন্ন ভিন্ন ডিরেক্টরিতে থাকে এবং সবগুলো জিনস আবার একটা রুট ডিরেক্টরিতে থাকে । আমাদের প্যাকেজ যদি ইন্সটল করা থাকে তবে আমরা যেকোনো জায়গা থেকে এটাকে import করতে পারি ।

প্যাকেজের সংজ্ঞা এইভাবে দেয়া যেতে পারে,
প্যাকেজ হল একটা ডিরেক্টরি যেটা থেকে আমরা পাইথন মডিউল import করতে পারি ।

প্যাকেজ কিভবে তৈরি করা যায় ?

আগেই বলেছি প্যাকেজ হল এটা ডিরেক্টরি / ফোল্ডার । সুতরাং প্যাকেজ বানাতে হলে প্রথমে আপানকে একটা ডিরেক্টরি / ফোল্ডার বানাতে হবে । মনে করি আমরা gonit নামে একটা ডিরেক্টরি তৈরি করেছি । এখন পাইথন কে বোঝাতে হবে যে আমরা যে ডিরেক্টরি তৈরি করেছি সেটা কোন সাধারণ ডিরেক্টরি না এটা একটা পাইথন প্যাকেজ । এটা বোঝানোর জন্য আমাদের কে ওই gonit ডিরেক্টরি তে init.py নামে একটা ফাইল তৈরি করতে হবে ( এটা ফাঁকাও থাকতে পারে ) । নিচে একটা ডিরেক্টরির গঠন নিচে দেখানো হল ।
gonit/
        __init__.py
        arithmatic.py

পাকজে ও মডিউল থেকে import করা

আমরা যদি উপরেই নিয়মে যদি প্যাকেজ বানায়ে থাকি তবে আমরা অনন্য প্যাকেজ যেভাবে import করে সেভাবেই import করতে পারব । আমদের বানানো প্যাকেজের জন্য import stement গুলো এই রকম হবে ।

পাইথন কিভাবে মডিউল ও প্যাকেজ কে খুঁজে বের করে ?

আমরা যখন কোন পাইথনের মডিউল বা প্যাকেজ কে import করি তখন পাইথন কে একটা বিষয় অবশ্যই জানতে হবে যে, পাইথন যে মডিউল বা প্যাকেজ কে import করতে চাচ্ছে সেটাকে সে কথাই খুঁজবে । বিশেষ কিছু ডিরেক্টরি আছে কোন কিছু import করলে পাইথন সেই বিশেষ ডিরেক্টরিতে মডিউল বা প্যাকেজ খুজতে থাকে । সেই বিশেষ ডিরেক্টরি গুলো হল,
  • The current directory.
  • The site-packages folder যেখানে আপনার পাইথন ইন্সটল করা আছে ।
  • In directories in the PYTHONPATH environment variable.
আপনার পাইথন কোন প্যাকেজ বা মডিউল import করলে সেটা কোন কোন ডিরেক্টরি সার্চ করে সেটা দেখার জন্য নিচের কাজ টি করতে পারেন । আমার জন্য এই রকম অউটপুট আসে । আপনার জন্য অন্য রকম আসতে পারে ।

আজকে পর্যন্তই । এতক্ষণ কষ্ট করে পড়ার জন্য ধন্যবাদ :

Comments

Popular posts from this blog

পাইথনে জেনারেটর ও তার খুঁটিনাটি বিষয়

এখানে আমরা দেখব যে পাইথনে জেনারেটর বিষয়টা কি । আমরা কিভাবে জেনারেটর বানাতে পারি । জেনারেটর এক্সপ্রেশন কি ? আমাদের কেন ও কি অবস্থায় জেনারেটর ব্যবহার করা দরকার । তো শুরু করা যাক । জেনারেটর কি ? পাইথনে iterator তৈরি করার সবচেয়ে সহজ উপয় হল জেনারেটর । সাধারণ ভাবে বলতে গেলে জেনারেটর একটা ফাংশন যেটা একটা iterator অবজেক্ট রিটার্ন করে । যেটাকে পরে আমরা iterate করতে পারি । এবং যেটা কেবল মাত্র একবারই iterate করা যাবে । এখন প্রশ্ন হল এই জেনারেটর কিভাবে বানানো যায় ? জেনারেটর বানানো খুব সহজ । আমরা সাধারণ ফাংশন যেভাবে লিখি ঠিক সেভাবেই আমরা জেনারেটর বানাতে পারি । কিন্তু এখানে return স্টেটমেন্টের পরিবর্তে yield স্টেটমেন্ট থাকবে । যদি কোন একটা ফাংশনে অন্তত একটা yield স্টেটমেন্ট থাকে তবে সেটা কে আমরা জেনারেটর বলতে পারি । তবে একটা জেনারেটরে একাধিক yield স্টেটমেন্ট থাকতে পারে । yield এবং return দুইটাই ফাংশন থেকে কোন ভেলু রিটার্ন করে কিন্তু দুইটার মধ্যে পার্থক্য হল return স্টেটমেন্ট একটা ফাংশন কে পুরাপুরি terminate করে ফেলে । কিন্তু yield ফাংশন কে terminate না করে ফাংশনকে pauses করে রাখ...

CPP তে map কেন এবং কিভাবে সেটা ব্যাবহার করতে হয়

C++ এর STL [ Standard Template Library ] এ কিছু কমন Data Structure ইমপ্লিমেন্ট করা আছে যেমন, vector, set, list, map, queue, deque, priority queue stack, bitset ইত্যাদি । এগুলো কে আমরা আমাদের প্রয়োজন অনুসাতে খুব সহজেই ব্যাবহার করেত পারি । আজকে আমরা এখানে map নিয়ে কিভাবে কাজ করা যায় সেটা নিয়ে আলোচনা করবো । কারণ উপরে আমরা যেগুলোর নাম লিখেছি তার মধ্যে map সবচেয়ে মজাদার । আমরা নিশ্চয় অ্যারে ব্যাবহার করেছি । অ্যারে তে আমরা কি করি ? আমরা অ্যারে এর টাইপ লিখি তারপর তার নাম দেই , তারপর তার সাইজ বলে দেই । আমাদের যদি ১০ সাইজ এর int টাইপ অ্যারে লাগে তখন আমরা লিখি 1 int arr[ 10 ]; value রাখার জন্য এবং পরে সেগুলো প্রিন্ট করার জন্য আমরা আমাদের অ্যারে এর ইনডেক্স ব্যাবহার করি 1 2 3 4 5 6 7 8 // for input for ( int i = 0 ; i < array_size; i ++ ) { cin >> arr[i]; } // for output for ( int i = 0 ; i < array_size; i ++ ) { cout << arr[i] << endl; } অ্যারে ইনডেক্স কিন্তু সবসময় int হতে হবে । ইনডেক্স কখ...