ভার্চ্যুয়াল এনভায়রনমেন্ট#
প্রথমেই আমাদের জানা দরকার ভার্চ্যুয়াল এনভায়রনমেন্ট আসলে কী জিনিস। আমরা জানি, পাইথন একটা মডার্ন প্রোগ্রামিং ল্যাঙ্গুয়েজ। অন্যান্য মডার্ন প্রোগ্রামিং ল্যাঙ্গুয়েজের মতো বিভিন্ন প্যাকেজ এবং মডিউল হ্যান্ডেল করার মৌলিক পদ্ধতি রয়েছে পাইথনের। আমরা ইতিমধ্যেই pip এর সাথে পরিচিত হয়েছি। এর কথাই বলছিলাম আর কি!
ধরা যাক, আমাদের দুটি প্রজেক্ট আছে : A ও B; দুটি প্রজেক্টেই আমরা requests প্যাকেজটি ব্যবহার করব। প্যাকেজটি ইনস্টল করার জন্য নিচের কমান্ড চালালেই চলে:
sudo pip3 install requestsএই কমান্ড টার্মিনালে চালালে প্যাকেজটার 2.12.4 ভার্সন আমাদের পিসিতে ইনস্টল হয়ে যাবে। এই যে প্যাকেজটা ইনস্টল করলাম, এটা কিন্তু গ্লোবাললি ইনস্টল করলাম। কথাটা একটু শক্ত মনে হতে পারে যে গ্লোবাললি আবার কী রকম কথা! কিন্তু একটু পরেই আমরা কথাটার তাৎপর্য বুঝতে পারব।
requests প্যাকেজটার যে ভার্সন আমরা ইনস্টল করলাম তা দিয়ে প্রজেক্ট A-র কাজ খুব ভালোভাবেই চলবে। কিন্তু প্রজেক্ট B-র দরকার requests প্যাকেজের 1.2.1 ভার্সনটা। এখন যদি এই ভার্সনটা ইনস্টল করতে যাই তাহলে 2.12.4 ভার্সনটা ওভাররাইট হয়ে যাবে। অথচ প্রজেক্ট A-র জন্য ওই ভার্সনটাও দরকার আমাদের। কী উপায় এখন? যদি কোনোভাবে দুটি ভার্সনই ইনস্টল করে কাজ করা যেত তাহলে সব সমস্যার সমাধান হয়ে যেত। আর এসব সমস্যা থেকে চিরতরে মুক্তি পেতেই ভার্চ্যুয়াল এনভায়রনমেন্ট আইডিয়া তৈরি হয়েছে। তা ছাড়া সফটওয়্যার টেস্ট করতেও ভার্চ্যুয়াল এনভায়রনমেন্ট অনেক কাজে আসে।
পাইথনের অফিশিয়াল ডকে ভার্চ্যুয়াল এনভায়রনমেন্টের একটি সংজ্ঞায় বলা হয়েছে-
ভার্চ্যুয়াল এনভায়রনমেন্ট হলো এমন একটি পাইথন এনভায়রনমেন্ট যেখানে ইনস্টল করা পাইথন ইন্টারপ্রিটার, লাইব্রেরি ও স্ক্রিপ্ট অন্যান্য ভার্চ্যুয়াল এনভায়রনমেন্ট ও সিস্টেম পাইথনে ইনস্টল করা লাইব্রেরি থেকে আলাদা। মূলত ভার্চ্যুয়াল এনভায়রনমেন্ট একটি ডিরেক্টরি ট্রি যাতে পাইথন এক্সিকিউটেবল ফাইল ও অন্যান্য ফাইল থাকে, যা দ্বারা প্রকাশ পায় যে এটি ভার্চ্যুয়াল এনভায়রনমেন্ট ছাড়া অন্য কিছু নয়।
ভার্চ্যুয়াল এনভায়রনমেন্টের মধ্যে আমরা পাইথন ইন্টারপ্রিটার ও এর বিভিন্ন প্যাকেজ লোকাললি ইনস্টল করতে পারি। লোকাললি বলা হলো এ জন্য যে ওই এনভায়রনমেন্টের বাইরে ওই ইন্টারপ্রিটার ও প্যাকেজের কোনো প্রভাব থাকবে না। যেসব প্যাকেজের প্রভাব পুরো সিস্টেমজুড়ে থাকে তাদের গ্লোবাল প্যাকেজ বলা হয়। এই হলো গ্লোবাল আর লোকাল আইডিয়ার পার্থক্য।
ভার্চ্যুয়াল এনভায়রনমেন্ট তৈরি করার জন্য আমরা pyvenv ও virtualenv কমান্ডলাইন টুল দুটির যেকোনো একটি ব্যবহার করতে পারি। পাইথন 3.4 থেকে pyvenv টুলটি পাইথন স্ট্যান্ডার্ড লাইব্রেরির সাথেই পাওয়া হচ্ছে। তবে আমরা virtualenv থার্ড-পার্টি প্যাকেজটি ব্যবহার করব। এটি একটি পিওর-পাইথন ডিস্ট্রিবিউশন। আমরা এখন টুলটা ইনস্টল করব। সে জন্য টার্মিনালে কমান্ড দেব-
$ sudo pip3 install virtualenvইনস্টল হয়ে গেলে আমরা নতুন একটি প্রজেক্ট ডিরেক্টরি তৈরি করে তার মধ্যে লাফ দেব-
$ mkdir ~/Desktop/newproject
$ cd ~/Desktop/newprojectহয়ে গেল নতুন প্রজেক্ট ডিরেক্টরি। তাহলে এর মধ্যে ভার্চ্যুয়াল এনভায়রনমেন্ট তৈরি করার কাজকর্ম শুরু করে দেওয়া যাক-
$ virtualenv envএখানে env মূলত ভার্চ্যুয়াল এনভায়রনমেন্ট ডিরেক্টরি। আমরা চাইলে এর বদলে যা খুশি তা-ই দিতে পারি। আমাদের তৈরি এই নতুন ভার্চ্যুয়াল এনভায়রনমেন্টকে অ্যাকটিভেট করার জন্য আমাদের টার্মিনালে কমান্ড চালাতে হবে-
$ source env/bin/activateওপরের কমান্ডটা চালালেই আমাদের ভার্চ্যুয়াল এনভায়রনমেন্ট চালু হয়ে যাওয়ার কথা। তবে আমরা যদি টার্মিনালে ব্যাস শেল বাদ দিয়ে, fish বা csh ব্যবহার করি সে ক্ষেত্রে ওপরের কমান্ড কাজ করবে না। তবে এ সমস্যার সহজ সমাধান আছে। ফিশের ক্ষেত্রে ওপরের কমান্ডের বদলে টার্মিনালে নিচের কমান্ড চালাব-
$ source env/bin/activate.fishআর csh-এর ক্ষেত্রে ওপরের কমান্ডের বদলে টার্মিনালে নিচের কমান্ড চালাব-
$ source env/bin/activate.cshআমাদের এই নতুন ভার্চ্যুয়াল এনভায়রনমেন্টে পাইথনের কোন ভার্সন চলছে তা একটু চেক করে দেখা যাক-
$ python -Vএই কমান্ড দিলেই রানিং পাইথনের ভার্সন শো করবে। এবার pip ব্যবহার করে requests প্যাকেজের 1.2.1 ভার্সনটি ইনস্টল করা যাক-
$ pip install -Iv requests==1.2.1কিন্তু যদি লেটেস্ট ভার্সনই ইনস্টল করতে চাই তাহলে বরাবরের মতো সেই পুরোনো কমান্ডই দিতে হবে-
$ pip install requestsএই হলো ভার্চ্যুয়াল এনভায়রনমেন্ট নিয়ে যাবতীয় আলোচনা। এ ছাড়া virtualenvwrapper, virtualenv-burrito, autoenv ইত্যাদি টুল নিয়ে গুগলে সার্চ করে ভালোভাবে জানার সুযোগ আছে।