मैं mkvirtualenv
कमांड के हुड के तहत क्या होता है इसके बारे में उत्सुक हूं और इसलिए मैं यह समझने की कोशिश कर रहा हूं कि यह virtualenv
पर कॉल कैसे करता है।`mkvirtualenv` कमांड के हुड के नीचे क्या होता है?
सबसे कम लटकने वाला फल यह पता लगाने के लिए है कि वर्चुअलएन्व प्रोग्राम इंस्टॉलेशन के बाद स्थित है और जहां mkvirtualenv प्रोग्राम स्थापना के बाद स्थित है। तो: -
Calvins-MacBook-Pro.local ttys006 Mon Apr 23 12:31:07 |~|
calvin$ which mkvirtualenv
Calvins-MacBook-Pro.local ttys006 Mon Apr 23 12:31:10 |~|
calvin$ which virtualenv
/opt/local/library/Frameworks/Python.framework/Versions/2.7/bin/virtualenv
तो अजीब बात मैं यहाँ देख सकते हैं कि which mkvirtualenv
किसी भी परिणाम नहीं देता है। क्यूं कर?
यह स्थापित करने के बाद आगे की खुदाई, virtualenvwrapper निर्देशिका में, मैं सिर्फ 3 अजगर फ़ाइलों को देखने के: -
Calvins-MacBook-Pro.local ttys004 Mon Apr 23 12:28:05 |/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/virtualenvwrapper|
calvin$ ls -la
total 88
drwxr-xr-x 8 root wheel 272 Apr 13 15:07 .
drwxr-xr-x 29 root wheel 986 Apr 15 00:55 ..
-rw-r--r-- 1 root wheel 5292 Apr 13 15:05 hook_loader.py
-rw-r--r-- 1 root wheel 4810 Apr 13 15:07 hook_loader.pyc
-rw-r--r-- 1 root wheel 1390 Apr 13 15:05 project.py
-rw-r--r-- 1 root wheel 2615 Apr 13 15:07 project.pyc
-rw-r--r-- 1 root wheel 7381 Apr 13 15:05 user_scripts.py
-rw-r--r-- 1 root wheel 11472 Apr 13 15:07 user_scripts.pyc
और मुझे लगता है कि केवल कारण है कि mkvirtualenv
मेरी टर्मिनल में अब उपलब्ध है, क्योंकि मैं जोड़ लिया है है source/opt/local/library/Frameworks/Python.framework/Versions/2.7/bin/virtualenvwrapper.sh
में। तो मैंने पहले पूछे गए प्रश्न का उत्तर दिया, यह केवल इसलिए है क्योंकि mkvirtualenv
को बैश फ़ंक्शन के रूप में व्यक्त किया गया है और यह मेरे टर्मिनल में उपलब्ध है क्योंकि मैंने अपने .bashrc
या .bash_profile
फ़ाइलों में वर्चुअलenvwrapper.sh को सोर्स किया है।
virtualenvwrapper.sh
स्क्रिप्ट में खुदाई, मैं
# Create a new environment, in the WORKON_HOME.
#
# Usage: mkvirtualenv [options] ENVNAME
# (where the options are passed directly to virtualenv)
#
function mkvirtualenv {
typeset -a in_args
typeset -a out_args
typeset -i i
typeset tst
typeset a
typeset envname
typeset requirements
typeset packages
in_args=("[email protected]")
if [ -n "$ZSH_VERSION" ]
then
i=1
tst="-le"
else
i=0
tst="-lt"
fi
while [ $i $tst $# ]
do
a="${in_args[$i]}"
# echo "arg $i : $a"
case "$a" in
-a)
i=$(($i + 1));
project="${in_args[$i]}";;
-h)
mkvirtualenv_help;
return;;
-i)
i=$(($i + 1));
packages="$packages ${in_args[$i]}";;
-r)
i=$(($i + 1));
requirements="${in_args[$i]}";;
*)
if [ ${#out_args} -gt 0 ]
then
out_args=("${out_args[@]-}" "$a")
else
out_args=("$a")
fi;;
esac
i=$(($i + 1))
done
set -- "${out_args[@]}"
eval "envname=\$$#"
virtualenvwrapper_verify_workon_home || return 1
virtualenvwrapper_verify_virtualenv || return 1
(
[ -n "$ZSH_VERSION" ] && setopt SH_WORD_SPLIT
\cd "$WORKON_HOME" &&
"$VIRTUALENVWRAPPER_VIRTUALENV" $VIRTUALENVWRAPPER_VIRTUALENV_ARGS "[email protected]" &&
[ -d "$WORKON_HOME/$envname" ] && \
virtualenvwrapper_run_hook "pre_mkvirtualenv" "$envname"
)
typeset RC=$?
[ $RC -ne 0 ] && return $RC
# If they passed a help option or got an error from virtualenv,
# the environment won't exist. Use that to tell whether
# we should switch to the environment and run the hook.
[ ! -d "$WORKON_HOME/$envname" ] && return 0
# If they gave us a project directory, set it up now
# so the activate hooks can find it.
if [ ! -z "$project" ]
then
setvirtualenvproject "$WORKON_HOME/$envname" "$project"
fi
# Now activate the new environment
workon "$envname"
if [ ! -z "$requirements" ]
then
pip install -r "$requirements"
fi
for a in $packages
do
pip install $a
done
virtualenvwrapper_run_hook "post_mkvirtualenv"
}
देखने यहाँ जहां मैं अभी तक समझ में नहीं आता है - मैं इस पार्टी समारोह में virtualenv
के लिए किसी भी प्रत्यक्ष संदर्भ को देखने के लिए नहीं है। तो यह बैश फ़ंक्शन mkvirtualenv
वास्तव में कमांड लाइन (उदा। mkvirtualenv -p python2.7 --no-site-packages mynewproject
) से पाइथन virtualenv
प्रोग्राम से तर्क कैसे पास करता है?