एक साल से अधिक समय तक, setV मेरे bash_scripts प्रोजेक्ट में छिपा हुआ था, लेकिन अब इसे सार्वजनिक करने का समय आ गया है। setV एक बैश फंक्शन है जिसका उपयोग मैं virtualenvwrapper के विकल्प के रूप में करता हूँ। यह बुनियादी सुविधाएँ प्रदान करता है जो आपको निम्न कार्य करने में सक्षम बनाती हैं:
- डिफ़ॉल्ट रूप से पायथन 3 का उपयोग करें
- नया वर्चुअल एनवायरनमेंट बनाएं
- -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 के योगदान अनुभाग पर जाएँ।
setV स्क्रिप्ट
#!/usr/bin/env bash
# setV - एक हल्का पायथन वर्चुअल एनवायरनमेंट मैनेजर।
# लेखक: सचिन (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 <आपका वर्चुअल एनवायरनमेंट नाम>
#
# उदाहरण के लिए:
# $ 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 # डिफ़ॉल्ट पायथन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 [विकल्प] [नाम]"
echo स्थितिजन्य तर्क:
echo -e "नाम वर्चुअल एनवी सक्रिय करें।"
echo वैकल्पिक तर्क:
echo -e "-l, --list सभी वर्चुअल एनवी सूचीबद्ध करें।"
echo -e "-n, --new नाम नया पायथन वर्चुअल एनवी बनाएँ।"
echo -e "-d, --delete नाम मौजूदा पायथन वर्चुअल एनवी हटाएँ।"
echo -e "-p, --python पथ पायथन बाइनरी पथ।"
}
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
}
# बैश-कम्पलीट कॉल करता है। compgen कमांड अधिकांश समान विकल्प स्वीकार करता है
# जो complete करता है लेकिन यह नियमों को केवल संग्रहीत करने के बजाय परिणाम उत्पन्न करता है।
complete -F _setvcomplete_ setv