প্রতিটি পাইথন ইনস্টলেশনেই একটি এনভায়রনমেন্ট থাকে। pip install কমান্ডের মাধ্যমে আমরা যে প্যাকেজগুলো ডাউনলোড করি সেগুলো ওই পাইথন এনভায়রনমেন্টে ইনস্টল হয়। এরপর সেই এনভায়রনমেন্ট ব্যবহার করে আমরা একাধিক প্রোজেক্ট রান করতে পারি।

ধরি আমাদের কম্পিউটারে দুটি Django প্রোজেক্ট আছে,

  • Blog Website
  • School Website

এখন কয়েকটা পরিস্থিতির কথা চিন্তা করিঃ

১. এই দুটি প্রোজেক্টই Default Python এনভায়রনমেন্ট উপর নির্ভরশীল। যেখানে Django 2.2 ইনস্টল করা আছে। এখন যদি Django এর নতুন ভার্শন রিলিজ হয় এবং আমরা Django 3.1 ভার্শনে আপডেট করি তাহলে আমাদের দুটি ওয়েবসাইটেই ইরর দেখা দিতে পারে। কারন ওয়েবসাইট দুটো Django 2.2 এর মতো করে কোড লেখা হয়েছে।

২. আমরা চাচ্ছি আমাদের Blog Website টা Django 2.2 তে রান হবে এবং School Website টা Django 3.1 এ রান হবে। সেটা কিভাবে সম্ভব? দুটো ওয়েবসাইট ই তো একটি এনভায়রনমেন্ট ব্যবহার করতেছে।

৩. আমরা চাচ্ছি আমাদের কম্পিউটারে একাধিক পাইথন ইনস্টল থাকবে (Python 2.7, Python 3.6, Python 3.8) এবং আমাদের ভিন্ন ভিন্ন প্রোজেক্ট ভিন্ন ভিন্ন পাইথনের ভার্শনে রান করবে। সেটা আমরা কিভাবে করতে পারি?

৪. আমাদের Blog Website টা তে আমরা মেশিন লার্নিং ব্যবহার করেছি বলে Django এর পাশাপাশি আমাদের অতিরিক্ত কিছু লাইব্রেরী যেমনঃ Numpy, Pandas, Scikit-learn, Tensorflow ইনস্টল করা লাগবে, কিন্তু School Website এ তো কোনো মেশিন লার্নিং ব্যবহার করা হয় নি তাহলে Single Enviroment এ যদি দুটি ভিন্ন স্পেসিফিকেশনের প্রোজেক্ট রান করে তাহলে School Website এর জন্য অযথাই Dependency List বেড়ে যাবে।

এসব সমস্যাগুলো সমাধান করার জন্যই Virtual Environment এর উদ্ভব হয়েছে।

আমাদের প্রয়োজন অনুযায়ী ভিন্ন ভিন্ন Python Version (2.7, 3.6, 3.8) অথবা লাইব্রেরীগুলোর ভিন্ন ভিন্ন ভার্শন (Django 2.2, Django 3.1) ব্যবহার করতে চাইলে আমাদের ভার্চুয়ালি নতুন একটি এনভায়রনমেন্ট তৈরী করতে হবে। নতুন এবং প্রতিটি প্রোজেক্টের জন্য আলাদা এনভায়রনমেন্ট ব্যবহার করলে অযথা Dependency List বাড়তে পারে না। এটি কিন্তু খুবই গুরুত্বপূর্ন।

ভার্চুয়াল এনভায়রনমেন্ট কিভাবে তৈরী করতে হয়?

পাইথনে ভার্চুয়াল এনভায়রনমেন্ট তৈরী করার জন্য আমরা বেশ কিছু প্যাকেজ/লাইব্রেরী ব্যবহার করতে পারি। সেগুলো নিয়ে আলোচনা করা যাক।

  1. Virtualenv: প্রথমে প্যাকেজটি ইনস্টল করে নিতে হবে pip install virtualenv.

    এরপর প্রোজেক্ট এর ভিতর গিয়ে virtualenv blogsiteenv এই কমান্ডটি রান করলেই blogsiteenv নামে একটি এনভায়রনমেন্ট তৈরী হয়ে যাবে।

    এনভায়রনমেন্ট টি activate করার জন্য যে কমান্ড টি রান করতে হবেঃ
    For Linux/MacOS: source blogsiteenv/bin/activate
    For Windows: .\blogsiteenv\Scripts\activate

    আমরা যদি অন্য নির্দিষ্ট ভার্শনের ভার্চুয়াল এনভায়রমেন্ট তৈরী করতে চাই তাহলে এই কমান্ডটি দিতে হবে
    For Linux/MacOS: virtualenv -p path\to\new_python blogsiteenv2
    For Windows: virtualenv -p path\to\new_python.exe blogsiteenv2

  2. Pipenv: ভার্চুয়াল এনভায়রনমেন্ট তৈরী করার সবচেয়ে সহজ উপায় হচ্ছে pipenv ব্যবহার করা। এজন্য pipenv ইনস্টল করে নিতে হবে। pip install pipenv

    ইনস্টল হয়ে গেলে আমরা যে প্রোজেক্টের জন্য ভার্চুয়াল এনভায়রনমেন্ট তৈরী করবো সে প্রোজেক্টের ভিতরে গিয়ে pipenv shell কমান্ডটি রান করলেই এনভায়রনমেন্ট তৈরী হয়ে যাবে। এটি মূলত ভার্চুয়াল এনভায়রনমেন্ট activate করার কমান্ড। কিন্তু এই প্রোজেক্টের জন্য আগে থেকে এনভায়রনমেন্ট তৈরী না থাকলে নতুন এনভায়রনমেন্ট তৈরী করার পাশাপাশি activate হয়ে যাবে।

    pipenv ব্যবহার করার আরেকটি সুবিধা হলো এটি dependency ম্যানেজমেন্টের জন্য pipfile ব্যবহার করে। এতে করে নতুন কোনো লাইব্রেরী ইনস্টল করলে সেটি সয়ংক্রিয়ভাবে pipfile এ লিস্ট হয়ে যায়। তবে এজন্য লাইব্রেরী ইনস্টল করার জন্য pip install something এর পরিবর্তে pipenv install something ব্যবহার করতে হবে। অর্থাৎ pip এর পরির্তে pipenv কিওয়ার্ড টি ব্যবহার করতে হবে।

    আরেকটি সুবিধা হলো ভার্চুয়াল এনভায়রনমেন্ট activate করার পর pipenv install কমান্ড দিলেই সয়ংক্রিয়ভাবে সমস্ত dependency গুলো ইনস্টল হয়ে যাবে। তাই পাইথনের requirements.txt ব্যবহার করার দরকার পরে না। তবে চাইলে requirements.txt ফাইল থেকেও dependency ইনস্টল করা যাবে।
  3. Venv: ভার্চুয়াল এনভায়রনমেন্ট তৈরী করার জন্য এটি পাইথনের বিল্টইন মডিউল। অর্থাৎ এই পদ্ধতি ব্যবহার করতে আপনাকে কোনো কিছু ইনস্টল করে নিতে হবে না।

    উইন্ডোজে এনভায়রনমেন্ট তৈরী করতে python -m venv envname
    উইন্ডোজে এনভায়রনমেন্ট এক্টিভেট করতে .\envname\Scripts\activate

কিছু লক্ষণীয় বিষয়ঃ

প্রতিটি প্রোজেক্টের জন্য আলাদা আলাদা ভার্চুয়াল এনভায়রনমেন্ট তৈরী করা ভালো। এতে করে প্রোজেক্টটি isolated থাকে এবং এনভায়রনমেন্ট সম্পর্কিত সমস্যা সহজেই খুজে বের করা যায়।

কোনো প্রোজেক্ট যখন রান করতে চাইবেন অথবা প্রোজেক্টটির জন্য নতুন কোনো প্যাকেজ ইনস্টল করবেন তখন অবশ্যই টার্মিনালে ভার্চুয়াল এনভায়রনমেন্ট activate করে নিতে হবে। অন্যথায় যেকোনো কমান্ডই Default Environment এ রান হবে। টার্মিনালে deactivate কমান্ড দিলে এনভায়রনমেন্ট deactivate হয়ে যাবে।

কোনো এনভায়রনমেন্টে কি কি প্যাকেজ ইনস্টল আছে অথবা dependency দেখার জন্য pip list কমান্ড রান করতে হবে।

আপনার প্রোজেক্ট টি অন্যজনের সাথে শেয়ার করবেন তখন আপনার প্রোজেক্টের dependency (যে প্যাকেজগুলোর উপর আপনার প্রোজেক্ট নির্ভরশীল) সহ শেয়ার করা খুবই গুরুত্বপূর্ণ। এতে করে অন্যজন সহজেই dependency গুলো ইনস্টল করে প্রোজেক্ট রান করতে পারবে। Dependency গুলো লিস্ট করার জন্য requirements.txt অথবা pipfile ব্যবহার করতে পারেন।

Pipenv ব্যবহার করলে pipfile স্বয়ংক্রিয়ভাবে জেনারেট হয়ে যায়। অন্যক্ষেত্রে pip freeze > requirements.txt কমান্ড রান করে requirements ফাইলটি তৈরী করে নিতে হবে।


0 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *