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

Operator Overloading Vs priority_queue in C++

priority_queue ডিফল্ট ভাবে বড় ডাটা কে টপে নিয়ে আশে । আমরা যদি < অপারেটর ওভারলোড করি তবে আমাদের মাথায় রাখতে হবে যে STL priority_queue হল ম্যাক্স priority_queue যার অর্থ ম্যাক্স উপদান কে সবার প্রথমে নিয়ে আসবে । এটা কে min priority_queue এ নিয়ে আসতে হলে return a.age < b.age;  এই লাইন কে , return a.age > b.age; এই লাইন দিয়ে পরিবর্তন করতে হবে । কোড : Output : 10 9 8 7 6 5 4 3 2 1 এখন আমরা যদি আউটপুট কে 1 2 3 4 5 6 7 8 9 10 দেখাতে চাই তবে ১২ নং লাইন পরিবর্তন করে লিখতে হবে return a.age > b.age; ধন্যবাদ :)
  Good becomes great, bad becomes worse. A strong man who has known power all his life can lose respect for that power, but a weak man knows the value of strength and knows compression

পাইথনে Yield কিভাবে কাজ করে ?

Yield কি সেটা বোঝার জন্য Generator বোঝা লাগবে । আবার Generator কি সেটা বোঝার জন্য Iterables বুঝতে হবে । কি প্রথমেই মাথা ঘুরে গেল ? আচ্ছা মাথা ঘুরলে ঘুরতে দেন :D  আমরা শুরু করে দেই  । Iterables কি ? আমরা যখন কোন লিস্ট ক্রিয়েট করি । আমরা লিস্টের আইটেম গুলি একটা একটা করে রিড করতে পারি । এটাকেই বলা হচ্ছে iteration code: এখানে my_list হল iterable . যখন আমরা list comprehension ব্যবহার করে কোন লিস্ট ক্রিয়েট করি সেটাও একটা iterable । code : Python এ যেসব জিনিস iterable যেমন: টাপল, লিস্ট, ফাইল, স্ট্রিং, .... ইত্যাদি কে আমরা for .... in ...: দিয়ে রিড করতে পারবো । ডাটা খুব সহজেই রিড করার জন্য এইটা খুব কাজে দেয় । কিন্তু এর একটা সমস্যা আছে । সেটা হল । এইটা সব সময় লিস্টের আইটেম গুলিকে মেমরি তে ষ্টোর করে রাখে । এখন আমাদের সবসময় মেমরি তে লিস্ট আইটেম গুলি সেভ করে নাও রাখা লাগতে পারে । তো এইটা আমরা কি ভাবে সমাধান করবো ? Generators কি ? Generators গুলো হল  একধরনের iterators । কিন্তু আমরা কেবল একবারই generator এ iterate করতে পারি । এর কারণ হল generator সব ভেলু কে মেমরি তে ষ্টোর...