pyenv এর সাথে virtualenv এর ব্যবহার

পাইথন প্রোগ্রামিং ল্যাঙ্গুয়েজে কাজ করার সময় মাঝে মধ্যে আমাদেরকে পাইথনের বিভিন্ন ভার্সনে সুইচ(switch) করতে হয়। এই কাজটি করার জন্য pyenv প্যাকেজটি অনেক বেশি জনপ্রিয়।

আবার অনেক সময় বিভিন্ন প্রজেক্ট নিয়ে কাজ করার জন্য ভার্চুয়াল ইনভার্নমেন্ট তৈরি করে কাজ করতে পারি। সেই ভার্চুয়াল ইনভার্নমেন্টে আমাদের পছন্দের পাইথন প্যাকেজ ইন্সটল করতে পারি যা মূল অপারেটিং সিস্টেমের প্যাকেজের সাথে কনফ্লিক্ট করে না। এই ধরনের পরিবেশ তৈরি করার জন্য আমরা সাধারনত virtualenv প্যাকেজটি ব্যবহার করি।

তাহলে চলুন দেখে নেয়া যাক কিভাবে pyenv এবং virtualenv ইন্সটল ও ব্যবহার করা যায়।

pyenv ইন্সটল করা:

উবুন্টুতে ডিপেন্ডেন্সিগুলো ইন্সটল করে নিন।

sudo apt-get install -y git make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils

পদ্ধতি-১:

টার্মিনালে নিচের কমান্ডটি রান করুন
curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash

পদ্ধতি-২:

আপনি চাইলে pip দিয়েও pyenv ইন্সটল করতে পারেন।

প্রথমে get-pip.py ডাউনলোড করে নিন এবং টার্মিনালে নিচের কমান্ডটি দিয়ে pip ইন্সটল করে নিন।

‌‌‌‌‌‌‍$ python3 get-pip.py

$ pip install --egg pyenv

ব্যস, আপনার pyenv সেটআপ সম্পন্ন হয়েছে। এখন আপনি চাইলেই তৈরিকৃত pyenv এর মধ্যে যেকোন পাইথন ভার্সন ইন্সটল করে নিতে পারেন। ধরুন আমরা পাইথন ল্যাঙ্গুয়েজের 3.6.1 ভার্সনটি ইন্সটল করবো। সেজন্য আপনাকে কমান্ড দিতে হবে –

$ pyenv install 3.6.1

এভাবে pyenv install এর পর আপনার যে ভার্সনটি ইন্সটল করা দরকার তার ভার্সন লিখে দিলেই pyenv সেই ভার্সনটি ডাউনলোড করে ইন্সটল করে নিবে।

আপনার ইনভার্নমেন্টে কোন কোন ভার্সন ইন্সটল করা আছে সে তালিকা দেখার জন্য নিচের কমান্ডটি লিখতে হবে।

$ pyenv versions

এখন আপনার যে ভার্সনটি দরকার সেটি ব্যবহার করার জন্য টার্মিনালে কমান্ড দিতে হবে –

$ pyenv global <version>

এখানে < version > এর জায়গায় আপনি pyenv এ ইন্সটল করা যে পাইথন ভার্সনটি ব্যবহার করতে চান সেটি লিখে দিতে হবে।

pyenv এর সাথে virtualenv এর ব্যবহার:

virtualenv ইন্সটল করা:

pyenv এর সাথে virtualenv ব্যবহার করার জন্য আমাদেরকে প্রথমে pyenv এর একটি প্লাগইন ডাউনলোড করে নিতে হবে। প্লাগইনটি ডাউনলোড করার জন্য টার্মিনালে লিখতে হবে –
$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

এরপর এই কমান্ডটি দিন –

$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc

পরিবর্তনগুলো কাজ করার জন্য নিচের কমান্ডটি দিন –

$ exec "$SHELL"

virtualenv এর ব্যবহার:

এখন আপনি যদি একটি ভার্চুয়াল ইনভার্নমেন্ট তৈরি করতে চান তাহলে আপনাকে টার্মিনালে লিখতে হবে –

$ pyenv virtualenv <python_version> <name>

এখানে < name > এর জায়গায় ভার্চুয়াল ইনভার্নমেন্ট এর জন্য একটি নাম দিন।

ভার্চুয়াল ইনভার্নমেন্টের তালিকা দেখার জন্য – $ pyenv virtualenvs

ভার্চুয়াল ইনভার্নমেন্টটি সচল করার জন্য কমান্ড হবে –

$ pyenv activate <name>

এখানে < name > এর জায়গায় আপনার তৈরিকৃত যেকোন একটি ভার্চুয়াল ইনভার্নমেন্ট এর নাম দিতে হবে।

আর বন্ধ করার জন্য – $ pyenv deactivate

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

এই কাজটি করার জন্য টার্মিনাল দিয়ে আপনার প্রজেক্টের ডিরেক্টরিতে প্রবেশ করুন। এরপর নিচের কমান্ডের মাধ্যমে ভার্চুয়াল ইনভার্নমেন্ট নির্ধারন করে দিন।

$ pyenv local <virtualenv or version>

এরপর থেকে আপনি যখনই টার্মিনাল দিয়ে আপনার প্রজেক্ট ফোল্ডারে ঢুকবেন সাথে সাথে আপনার কাঙ্খিত পাইথন ভার্সন অথবা ভার্চুয়াল ইনভার্নমেন্ট চালু হয়ে যাবে। 🙂

আজ এ পর্যন্তই। 🙂

Advertisements

নোডজেএস : কোড পরিবর্তনের পর সার্ভার রিলোড করা

আমরা যখন নোডজেএস এ কাজ করি তখন আমাদের কাজগুলো ব্রাউজারে দেখার জন্য নোড সার্ভার চালু রাখতে হয়। নোডজেএসে app.js যদি আমাদের প্রধান ফাইল হয় তাহলে সার্ভার চালু করার জন্য টারমিনালে লিখতে হবে

node app.js

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

nodemon-কে আপনার সিস্টেমে ইন্সটল করার জন্য টারমিনালে লিখুন-

npm install nodemon -g

এতে করে nodemon আপনার কম্পিউটারে ইন্সটল হয়ে যাবে। এখন সেটি চালু করার পালা। nodemon চালু করার জন্য টারমিনালের মাধ্যমে আপনার প্রজেক্ট ডিরেক্টরিতে যান। আপনার প্রজেক্টের মূল ফাইলটি যদি app.js হয় তাহলে টারমিনালে লিখতে হবে-

nodemon app.js &

অথবা

nodemon app &

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

এখন exit লিখে সার্ভার থেকে লগআউট করলেও আপনার সার্ভারে nodemon সচল থাকবে। তাহলে আর দেরি কেন এখনই আপনার নোড প্রজেক্টে nodemon ইন্সটল করে নিন। 🙂

কমেন্টে আপনার মতামত লিখতে ভুলবেননা যেনো…

ইমেকস : ডায়ারড (Emacs Dired)

চলুন আজ জেনে নেই কিভাবে ইমেকসে(Emacs) ফাইল এবং ফোল্ডার ব্যবস্থাপনা করা যায়। ইমেকসে ফাইল এবং ফোল্ডার সুন্দরভাবে ব্যাবস্থাপনার জন্য যে মোডটি ব্যবহার করা হয় সেটি হচ্ছে ডায়ারড(Dired – Directory Editor)। ডায়ারড মোড চালু করার জন্য আমাদেরকে C-x d (Ctrl+x d) চাপ দিতে হবে। এরপর যে ডিরেক্টরি নিয়ে কাজ করবো সেটাতে প্রবেশ করতে হবে। এতে করে ইমেকসে ফাইল এবং ফোল্ডারের একটি লিস্ট প্রদর্শণ করবে। আমরা কোন ফোল্ডারে প্রবেশ করতে চাইলে ফোল্ডারটির উপর কার্সর নিয়ে Enter চাপ দিতে হবে। একইভাবে ইমেকসে কোন ফাইল খুলতে চাইলে ফাইলটির উপর কার্সর নিয়ে Enter চাপতে হবে। এছাড়াও ডিরেক্টরি ব্যবস্থাপনার জন্য যেসকল কমান্ড দিতে হবে সেগুলো নিচে দেয়া হলো-

১. কোন ডিরেক্টরি উইন্ডো বন্ধ করতে চাইলে - q 
২. পূর্বের ডিরেক্টরিতে ফিরে যেতে চাইলে - ^ 
৩. নতুন ফোল্ডার তৈরি করার জন্য - + 
৪. কোন ফাইল বা ফোল্ডার কপি করার জন্য - C 
৫. কোন ফাইল বা ফোল্ডার মুছে ফেলার জন্য - D 
৬. কোন ফাইল বা ফোল্ডারের নাম পরিবর্তন করার জন্য - R 
৭. ডিরেক্টরি রিফ্রেশ করার জন্য - g

একটি গণপাঠাগার

library6
কোন কিছু সঠিকভাবে মেনে চলার জন্য সবচেয়ে যে বড় বাধাটি কাজ করে সেটি হচ্ছে জ্ঞানের সীমাবদ্ধতা। কারন কোন কিছু মেনে চলার জন্য আমাদেরকে সর্বপ্রথম জানতে হয় সেটি কিভাবে করতে হবে। ঠিক তেমনিভাবে আমরা যদি ইসলামের অনুশাসনগুলো মেনে চলতে চাই তাহলে আমাদেরকে সর্বপ্রথম জানতে হবে সেগুলো কি এবং কিভাবে মানতে হবে। কিন্তু আমরা যারা আমাদের পিতা-মাতা মুসলিম হওয়ার কারনে নিজেদেরকে মুসলিম বলে দাবি করি তাদের অধিকাংশই সঠিক ইসলাম সম্পর্কে বেখবর। আমাদের অধিকাংশই ইসলাম বলে সেই সব রীতিনীতিকেই বুঝি যেগুলো আমাদের বাপ-দাদারা বছরের পর বছর ধরে পালন করে আসছে। হয়তো কখনো জানতে চেষ্টা করিনি সেগুলোর উৎস কি। দুঃখের বিষয় এই উপমহাদেশে ইসলামের সাথে এমন কিছু দেশীয় সংস্কৃতি যুক্ত হয়েছে যেগুলোকে ইসলামের মধ্যে গণ্য করা যায় না। তাই সঠিক ইসলাম জানার জন্য জ্ঞান অর্জনের কোন বিকল্প নেই।
জ্ঞান অর্জনের ক্ষেত্রে একটি বড় সমস্যা হচ্ছে প্রয়োজনীয় বই হাতের কাছে না পাওয়া। যদিও বর্তমান সময়ে ইসলামী সাহিত্যের ভান্ডার অপ্রতুল নয় কিন্তু সেগুলো সংগ্রহে রাখা অনেকের জন্য কষ্টসাধ্য ব্যাপার। আমরা যারা গণসচেতনতা তৈরি করতে চাই তাদের উচিত ইসলামী সাহিত্যগুলোকে সহজলভ্য করা। যাতে কেউ চাইলেই যে কোন বিষয়ে খুব সহজে জানতে পারে। তাই আজ বাংলাদেশের প্রতিটি পাড়ায়-মহল্লায় গণপাঠাগার প্রতিষ্ঠা করা সময়ের দাবি।
এমনই কিছু চিন্তা-ভাবনা করে কয়েকবার চেষ্টা করেছিলাম আমাদের এলাকায় একটি গণপাঠাগার স্থাপন করার জন্য। একবার তো অনেকদুর এগিয়েও গিয়েছিলাম। নিজের সীমিত জ্ঞানদিয়ে একটি রুপরেখা তৈরি করে ফেলেছিলাম। কিভাবে পাঠাগার পরিচালনা করা হবে, কিভাবে পাঠাগারের ব্যয় নির্বাহ করা হবে ইত্যাদি। কয়েকজনের সাথে বিষয়টি শেয়ারও করেছিলাম। তারা অনেক সুপরামর্শ দিয়েছিলেন, তুলে ধরেছিলেন অনেক সমস্যার কথাও। সবচেয়ে যে সমস্যাটা বড় হয়ে দেখা দিয়েছিল সেটি হচ্ছে টাকা পয়সার সমস্যা। নাহ্, এত দৌড়-ঝাপ কোন কাজেই আসলো না। পারিনি কাঙ্খিত পাঠাগারটি প্রতিষ্ঠা করতে। তাই বলে আজো হাল ছেড়ে দেইনি। এখনো স্বপ্ন দেখি, এখনও পরিকল্পনা করি। কল্পনায় দেখতে চেষ্টা করি সেই সময়টিকে যখন আমাদের একটি গণপাঠাগার থাকবে। ছাত্র-ছাত্রী থেকে শুরু করে আপামর জনতা ছুটে আসবে সেখানে। জানতে পারবে সঠিক ইসলাম সম্পর্কে।

গিট : একাধিক রিমোট রিপোজিটরির সাথে সংযোগ

একই রিপোজিটরিতে একাধিক ডেভেলপার কাজ করলে একজন ডেভেলপার অন্য একজন ডেভেলপারের কাজ pull করার প্রয়োজন হতে পারে। এছাড়াও admin যখন কোন ডেভেলপারের কাজ পর্যবেক্ষণ করবেন তখন ঐ ডেভেলপারের রিপোজিটরির সাথে admin এর রিপোজিটরির সংযোগ দিতে হবে। চলুন দেখে নেয়া যাক কিভাবে রিমোট রিপোজিটরির সাথে সংযোগ দেয়া যায়।
রিমোট রিপোজিটরির সাথে সংযোগ দেয়ার জন্য আমাদেরকে git remote কমান্ডটি ব্যবহার করতে হবে। সম্পূর্ণ কমান্ডটি নিচে দেয়া হলো-
git remote add name server-address
এখানে name এর জায়গায় আপনি রিমোট রিপোজিটরিটিকে যে নামে ডাকতে চান সে নাম হবে। server-address এর জায়গায় রিমোট রিপোজিটরিটির address দিতে হবে।
ধরুন আমরা একটি কেন্দ্রীয় রিপোজিটরি তৈরি করলাম যার নাম হচ্ছে rms এবং রিপোজিটরিটির address হচ্ছে https://bitbucket.org/precursortechnology/rms.git । এখন এতে যতজন ডেভেলপার কাজ করবে সবাই এই রিপোজিটরিটি fork করতে হবে (fork সম্পর্কে জানতে দেখুন)। এখন ডেভেলপাররা যদি তাদের রিপোজিটরিকে কেন্দ্রীয় রিপোজিটরির(https://bitbucket.org/precursortechnology/rms.git) সাথে সংযোগ দিতে চান তাহলে তাদেরকে লিখতে হবে
git remote add upstream https://bitbucket.org/precursortechnology/rms.git
এখানে আমরা কেন্দ্রীয় রিপোজিটরিকে চেনার জন্য upstream নাম ব্যবহার করেছি। আপনি চাইলে অন্য যে কোন নাম ব্যবহার করতে পারেন। এখন কোন ডেভেলপার যদি কেন্দ্রীয় রিপোজিটরির তথ্য pull করতে চান তাহলে তাকে লিখতে হবে
git pull upstream master
pull করে মানে হচ্ছে ঐ রিপোজিটরির সর্বশেষ আপডেটগুলো আপনার রিপোজিটরির সাথে একীভূত করে নেয়া। pull কমান্ড দিয়ে মূলত দুটি কাজ করা হয়। প্রথমে রিমোট রিপোজিটরিটির তথ্যগুলো fetch করে নেয়া হয় এবং পরে সেগুলো লোকাল রিপোজিটরির সাথে merge করা হয়। উপরের কমান্ড দিয়ে আমরা upstream নামক রিমোট রিপোজিটরির master branch(ব্রাঞ্চ নিয়ে অন্য টিউটরিয়ালে আলোচনা করা হবে)-এর সাথে নিজেদের repository merge করে নিলাম।
admin যদি কোন ডেভেলপারের সাথে সংযুক্ত হতে চান তাহলে তাকেও উপরের ধাপগুলো অনুসরণ করতে হবে।
একটি রিপোজিটরি চাইলে একাধিক রিমোট রিপোজিটরির সাথে সংযুক্ত হতে পারবে।

গিট : একই রিপোজিটরিতে একাধিক ডেভেলপার

সাধারণত আমরা যখন কোন প্রজেক্ট বা রিপোজিটরি নিয়ে একটি টিমে(team) কাজ করি তখন প্রজেক্ট ব্যবস্থাপনাটা একটু জটিল হয়ে যায়। বিশেষ করে একই ফাইলে একাধিক ডেভেলপার কাজ করা। এই সমস্যার সমাধানের জন্য গিট যে পদ্ধতি ব্যবহার করেছে তা এক কথায় অসাধারণ। কোন কাজ অথবা কোড না হারিয়েই একই ফাইলে কাজ করতে পারবেন অসংখ্য ডেভেলপার। একটি রিপোজিটরি নিয়ে অসংখ্য ডেভেলপার বিচ্ছিন্নভাবে কাজ করলেও সবাই সংযুক্ত থাকতে পারবেন গিট এর মাধ্যমে। কথাটা শুনতে খাপছাড়া মনে হলেও এটাই সত্যি। তাহলে দেরি না করে চলুন দেখা যাক কিভাবে একই রিপোজিটরিতে অসংখ্য ডেভেলপার কাজ করতে পারবেন।
আমরা এখানে যে পদ্ধতি নিয়ে আলোচনা করবো তা অধিকাংশ ওপেনসোর্স(opensource) রিপোজিটরিতে ব্যবহার করা হয়।
=> প্রথমেই আমাদেরকে এমন একটি রিমোট রিপোজিটরি তৈরি করতে হবে যা কেন্দ্রীয় রিপোজিটরি হিসেবে ব্যবহার করা হবে। আপনি যদি বিনামূল্যে github(একটি গিট রিপোজিটরি সার্ভার) ব্যবহার করেন তাহলে যে কেউ আপনার রিপোজিটরিতে read access পাবে। কিন্তু bitbucket ব্যবহার করলে আপনি যদি রিপোজিটরি public না করে দেন তাহলে কেউ দেখতে পাবে না। চাইলে আপনি private রিপোজিটরিতেও আপনার পছন্দনীয় ব্যক্তিকে read, write অথবা admin access দিতে পারবেন। তাই আপনি যে সকল ডেভেলপারকে আপনার রিপোজিটরিতে সংযুক্ত করবেন তাদেরকে read access দিন।
=>ফোর্ক(fork): admin ব্যতিত যে সকল ডেভেলপার একই রিপোজিটরিতে কাজ করবেন তাদেরকে কেন্দ্রীয় বা মূল রিপোজিটরিতে Fork করতে হবে। ফোর্ক মানে হচ্ছে ডেভেলপারের সার্ভার একাউন্টে(account) মূল রিপোজিটরির মত একটি স্বতন্ত্র রিপোজিটরি তৈরি করা। ফোর্ক করার পর ডেভেলপার যে রিপোজিটরি তৈরি করবেন তা একান্তই তার নিজস্ব। এতে মূল রিপোজিটরির সাথে দৃশ্যত কোন সম্পর্ক থাকবে না। পরবর্তীতে আমরা চাইলে মূল রিপোজিটরির সাথে সংযোগ দিতে পারবো। একটি রিপোজিটরি ফোর্ক করা খুবই সহজ-

– কেন্দ্রীয় রিপোজিটরিতে প্রবেশ করুন
– Fork বাটনে(button) ক্লিক করুন
– প্রয়োজনীয় তথ্য পূরণ করে submit করুন
ডেভেলপার এখন একটি নিজস্ব রিপোজিটরির মালিক। :)
=> এখন ডেভেলপার তার নিজস্ব রিপোজিটরিতে নতুন যে কোন feature নিয়ে কাজ করতে পারবেন। করতে পারবেন যে কোন ধরনের সম্পাদনা।
কাজতো হলো কিন্তু এবার এত পরিশ্রমের কাজ কিভাবে মূল রিপোজিটরির সাথে সংযুক্ত করবো? খুবই সহজ–
=> Compare: কোন কোন রিমোট রিপোজিটরি সার্ভারে আপনার করা কাজকে compare করার সুযোগ রাখা হয়েছে। চাইলে আপনি দেখে নিতে পারেন মূল রিপোজিটরির সাথে আপনি কি সংযোজন-বিয়োজন করেছেন। compare করার জন্য ডেভেলপার তার রিপোজিটরি পাতায় compare বাটনে ক্লিক করুন। দেখে নিন আপনার কাজের বর্ণনা।
=> Pull Request: আপনার কাজগুলো মূল রিপোজিটরিতে অন্তর্ভুক্ত করার জন্য মূল রিপোজিটরিতে একটি Pull Request পাঠাতে হবে। এতে করে মূল রিপোজিটরিতে ডেভেলপারের কাজ সংযুক্ত করার জন্য একটি বার্তা প্রেরণ করা হবে। admin চাইলে ডেভেলপারের কাজ গ্রহন অথবা বাতিল করতে পারবেন। ডেভেলপার শুধু তার কাজ গ্রহন করা হয়েছে কি বাতিল করা হয়েছে এই মর্মে একটি বার্তা পাবেন। Pull Request পাঠানোর জন্য ডেভেলপার তার রিপোজিটরি পাতায় pull request বাটনে ক্লিক করুন।


=> এখন এডমিন তার মূল রিপোজিটরিতে একটি নতুন Pull Request পাবেন। কাজ পর্যবেক্ষণের পর তা গ্রহন করার মত হলে মূল রিপোজিটরির সাথে Merge করে নেবেন।
উপরের যে ধাপগুলো বর্ণনা করা হয়েছে সেগুলো সম্পূর্ণ সার্ভারভিত্তিক। আপনি চাইলে সার্ভারের ওয়েব সাইটে প্রবেশ না করে গিট কমান্ড এর মাধ্যমে সরাসরি আপনার নিজস্ব কম্পিউটার থেকে ডেভেলপারদের কাজ পর্যবেক্ষণ করতে পারবেন। সেজন্য আপনাকে জানতে হবে কিভাবে আপনি একাধিক রিমোট রিপোজিটরির সাথে সংযুক্ত হবেন। আমরা আগামী টিউটরিয়ালে এ বিষয়ে আলোচনা করবো, ইনশাআল্লাহ।