এক বছরের বেশি সময় ধরে setV আমার bash_scripts প্রজেক্টের ভেতরে লুকিয়ে থাকা পরেও, এখন এটি পাবলিক করার সময় আসেছে। setV হল একটি ব্যাশ ফাংশন যা আমি virtualenvwrapper-এর বিকল্প হিসেবে ব্যবহার করি। এটি মৌলিক বৈশিষ্ট্যগুলি প্রদান করে যা আপনাকে নিম্নলিখিত কাজগুলো করতে সক্ষম করে:
- ডিফল্টভাবে পাইথন ৩ ব্যবহার করুন
- নতুন ভার্চুয়াল এনভায়রনমেন্ট তৈরি করুন
- -p (বা --python) অপশন দিয়ে কাস্টম পাইথন পাথ ব্যবহার করে নতুন ভার্চুয়াল এনভায়রনমেন্ট তৈরি করুন
- মৌজুदा ভার্চুয়াল এনভায়রনমেন্ট মুছে দিন
- সব মৌজুदा ভার্চুয়াল এনভায়রনমেন্টের তালিকা দেখুন
- ট্যাব কমপ্লিশন ব্যবহার করুন (যদি আপনি ভার্চুয়াল এনভায়রনমেন্টের নাম ভুলে যান)
ইনস্টলেশন
setV ইনস্টল করতে, স্ক্রিপ্টটি ডাউনলোড করুন:
curl https://gitlab.com/psachin/setV/raw/master/install.sh
স্ক্রিপ্টটি পর্যালোচনা করুন, তারপর এটি চালান:
sh ./install.sh
setV ইনস্টল করার সময়, ইনস্টলেশন স্ক্রিপ্ট আপনাকে ~/.bashrc বা ~/.bash_profile সোর্স করার জন্য বলবে। অবশ্যই এটি করুন।
ব্যবহার
মৌলিক কমান্ড হল setv।
ভার্চুয়াল এনভায়রনমেন্ট তৈরি করুন:
setv --new rango # setv -n rango
# অথবা কাস্টম পাইথন বাইনারি পাথ ব্যবহার করে
setv --new --python /opt/python/python3 rango # setv -n -p /opt/python/python3 rango
মৌজুदा এনভায়রনমেন্ট সক্রিয় করুন:
setv VIRTUAL_ENVIRONMENT_NAME
# উদাহরণস্বরূপ
setv rango
সব ভার্চুয়াল এনভায়রনমেন্টের তালিকা দেখুন:
setv --list
# অথবা
setv [TAB] [TAB]
ভার্চুয়াল এনভায়রনমেন্ট মুছে দিন:
setv --delete rango
অন্য ভার্চুয়াল এনভায়রনমেন্টে স্যুইচ করুন:
# ধরে নিচ্ছি আপনি 'rango'-তে আছেন, 'tango'-তে স্যুইচ করতে
setv tango
ট্যাব কমপ্লিশন
যদি আপনি ভার্চুয়াল এনভায়রনমেন্টের নাম সম্পূর্ণভাবে মনে না পারেন, তবে ভার্চুয়াল এনভায়রনমেন্টের নামের জন্য ব্যাশ-স্টাইল ট্যাব কমপ্লিশন কাজ করে।
জড়িত হন
setV GNU GPLv3-এর অধীনে ওপেন সোর্স, এবং অবদান রক্ষা করা হচ্ছে। আরও জানতে, GitLab রিপোজিটরিতে setV-এর README-এর Contribute অংশ দেখুন।
setV স্ক্রিপ্ট
#!/usr/bin/env bash
# setV - একটি হালকা পাইথন ভার্চুয়াল এনভায়রনমেন্ট ম্যানেজার।
# লেখক: সachine (psachin) <iclcoolster@gmail.com>
# লেখকের URL: https://psachin.gitlab.io/about
#
# লাইসেন্স: GNU GPL v3, LICENSE ফাইল দেখুন
#
# কনফিগার করুন (ঐচ্ছিক):
# `SETV_VIRTUAL_DIR_PATH` মান আপনার ভার্চুয়াল এনভায়রনমেন্ট
# ডিরেক্টরি-পাথ হিসেবে সেট করুন। ডিফল্টভাবে এটি '~/virtualenvs/'
#
# ব্যবহার:
# ম্যানুয়াল ইনস্টল: আপনার .bashrc বা যেকোনো লোকাল rc স্ক্রিপ্টে নিচের লাইনটি যোগ করুন:
# ---
# source /path/to/virtual.sh
# ---
#
# এখন আপনি টাইপ করে ভার্চুয়াল এনভায়রনমেন্ট 'সক্রিয়' করতে পারেন
# $ setv <YOUR VIRTUAL ENVIRONMENT NAME>
#
# উদাহরণস্বরূপ:
# $ setv rango
#
# অথবা টাইপ করুন:
# setv [TAB] [TAB] (সभी ভার্চুয়াল এনভায়রনমেন্টের তালিকা দেখতে)
#
# আপনার সব ভার্চুয়াল এনভায়রনমেন্টের তালিকা দেখতে:
# $ setv --list
#
# নতুন ভার্চুয়াল এনভায়রনমেন্ট তৈরি করতে:
# $ setv --new new_virtualenv_name
#
# মৌজুदा ভার্চুয়াল এনভায়রনমেন্ট মুছে দিতে:
# $ setv --delete existing_virtualenv_name
#
# ডিএক্টিভেট করতে, টাইপ করুন:
# $ deactivate
# ভার্চুয়াল এনভায়রনমেন্ট ডিরেক্টরির পাথ
SETV_VIRTUAL_DIR_PATH="$HOME/virtualenvs/"
# ব্যবহারের ডিফল্ট পাইথন ভার্সন। এটি সিদ্ধান্ত নেয় যে `virtualenv` ব্যবহার করা হবে কিনা অথবা `python3 -m venv`
SETV_PYTHON_VERSION=3 # ডিফল্টভাবে পাইথন ৩
SETV_PY_PATH=$(which python${SETV_PYTHON_VERSION})
function _setvcomplete_()
{
# ব্যাশ-অটোকমপ্লিশন।
# এটি নিশ্চিত করে যে ভার্চুয়াল এনভায়রনমেন্টের নামের জন্য ট্যাব-অটো-কমপ্লিশন কাজ করে।
local cmd="${1##*/}" # কমান্ড(গুলি) হ্যান্ডেল করতে
# এমনকি প্রয়োজন নেই। 'setv' একমাত্র কমান্ড
local word=${COMP_WORDS[COMP_CWORD]} # যে শব্দটি কমপ্লিট হচ্ছে
local xpat='${word}' # ফিল্টার প্যাটার্ন। শুধু '$names' ভেরিয়েবলে থাকা শব্দগুলি অন্তর্ভুক্ত করুন
local names=$(ls -l "${SETV_VIRTUAL_DIR_PATH}" | egrep '^d' | awk -F " " '{print $NF}') # ভার্চুয়াল এনভায়রনমেন্টের নাম
COMPREPLY=($(compgen -W "$names" -X "$xpat" -- "$word")) # compgen ফলাফল তৈরি করে
}
function _setv_help_() {
# সাহায্য/ব্যবহার বার্তা প্রিন্ট করুন
echo "ব্যবহার: setv [OPTIONS] [NAME]"
echo পজিশনাল আর্গুমেন্ট:
echo -e "NAME ভার্চুয়াল এনভায়রনমেন্ট সক্রিয় করুন।"
echo ঐচ্ছিক আর্গুমেন্ট:
echo -e "-l, --list সব ভার্চুয়াল এনভায়রনমেন্টের তালিকা দেখুন।"
echo -e "-n, --new NAME নতুন পাইথন ভার্চুয়াল এনভায়রনমেন্ট তৈরি করুন।"
echo -e "-d, --delete NAME মৌজুदा পাইথন ভার্চুয়াল এনভায়রনমেন্ট মুছে দিন।"
echo -e "-p, --python PATH পাইথন বাইনারি পাথ।"
}
function _setv_custom_python_path()
{
if [ -f "${1}" ];
then
if [ "`expr $1 : '.*python\([2,3]\)'`" = "3" ];
then
SETV_PYTHON_VERSION=3
else
SETV_PYTHON_VERSION=2
fi
SETV_PY_PATH=${1}
_setv_create $2
else
echo "ত্রুটি: পাথ ${1} বিদ্যমান নেই!"
fi
}
function _setv_create()
{
# -n|--new ফ্ল্যাগের সাথে চালালে নতুন ভার্চুয়াল এনভায়রনমেন্ট তৈরি করে
if [ -z ${1} ];
then
echo "আপনাকে ভার্চুয়াল এনভায়রনমেন্টের নাম পাস করতে হবে"
_setv_help_
else
echo "নতুন ভার্চুয়াল এনভায়রনমেন্ট তৈরি করা হচ্ছে নাম: $1"
if [ ${SETV_PYTHON_VERSION} -eq 3 ];
then
${SETV_PY_PATH} -m venv ${SETV_VIRTUAL_DIR_PATH}${1}
else
virtualenv -p ${SETV_PY_PATH} ${SETV_VIRTUAL_DIR_PATH}${1}
fi
echo "আপনি এখন টাইপ করে পাইথন ভার্চুয়াল এনভায়রনমেন্ট সক্রিয় করতে পারেন: setv ${1}"
fi
}
function _setv_delete()
{
# -d|--delete ফ্ল্যাগের সাথে চালালে ভার্চুয়াল এনভায়রনমেন্ট মুছে দেয়
# TODO: রিফ্যাক্টর
if [ -z ${1} ];
then
echo "আপনাকে ভার্চুয়াল এনভায়রনমেন্টের নাম পাস করতে হবে"
_setv_help_
else
if [ -d ${SETV_VIRTUAL_DIR_PATH}${1} ];
then
read -p "সত্যিই এই ভার্চুয়াল এনভায়রনমেন্ট মুছে দেবেন (Y/N)? " yes_no
case $yes_no in
Y|y) rm -rvf ${SETV_VIRTUAL_DIR_PATH}${1};;
N|n) echo "ভার্চুয়াল এনভায়রনমেন্টটিকে যেনে রাখা হচ্ছে।";;
*) echo "আপনাকে Y/y বা N/n লিখতে হবে"
esac
else
echo "ত্রুটি: ${1} নামে কোনো ভার্চুয়াল এনভায়রনমেন্ট পাওয়া যায়নি"
fi
fi
}
function _setv_list()
{
# -l|--list ফ্ল্যাগের সাথে চালালে সব ভার্চুয়াল এনভায়রনমেন্টের তালিকা দেখায়
echo -e "আপনার ${SETV_VIRTUAL_DIR_PATH} অধীনে থাকা ভার্চুয়াল এনভায়রনমেন্টের তালিকা:\n"
for virt in $(ls -l "${SETV_VIRTUAL_DIR_PATH}" | egrep '^d' | awk -F " " '{print $NF}')
do
echo ${virt}
done
}
function setv() {
# মূল ফাংশন
if [ $# -eq 0 ];
then
_setv_help_
elif [ $# -le 3 ];
then
case "${1}" in
-n|--new) _setv_create ${2};;
-d|--delete) _setv_delete ${2};;
-l|--list) _setv_list;;
*) if [ -d ${SETV_VIRTUAL_DIR_PATH}${1} ];
then
# ভার্চুয়াল এনভায়রনমেন্ট সক্রিয় করুন
source ${SETV_VIRTUAL_DIR_PATH}${1}/bin/activate
else
# অন্যথায় ত্রুটি বার্তা দেখান
echo "দুঃখিত, আপনার ${1} নামে কোনো ভার্চুয়াল এনভায়রনমেন্ট নেই"
_setv_help_
fi
;;
esac
elif [ $# -le 5 ];
then
case "${2}" in
-p|--python) _setv_custom_python_path ${3} ${4};;
*) _setv_help_;;
esac
fi
}
# bash-complete কল করে। compgen কমান্ড complete-এর মতো বেশির ভাগ অপশন গ্রহণ করে কিন্তু এটি ভবিষ্যতে ব্যবহারের জন্য নিয়ম সংরক্ষণ করার পরিবর্তে ফলাফল তৈরি করে।
complete -F _setvcomplete_ setv