मैं यह जानना चाहूंगा कि क्या लिनक्स सिस्टम पर अजगर स्थापित है और यदि यह है, तो अजगर संस्करण कौन सा स्थापित है।
मैं यह कैसे कर सकता हूं? के उत्पादन को पार्स करने की तुलना में अधिक सुंदर कुछ है "python --version"?
मैं यह जानना चाहूंगा कि क्या लिनक्स सिस्टम पर अजगर स्थापित है और यदि यह है, तो अजगर संस्करण कौन सा स्थापित है।
मैं यह कैसे कर सकता हूं? के उत्पादन को पार्स करने की तुलना में अधिक सुंदर कुछ है "python --version"?
python --version। आपको उपयोग करने की आवश्यकता है python -V।
जवाबों:
आप निम्नलिखित पंक्तियों के साथ कुछ का उपयोग कर सकते हैं:
$ python -c 'import sys; print(sys.version_info[:])'
(2, 6, 5, 'final', 0)
टपल का दस्तावेज यहां दिया गया है । आप संस्करण संख्या को अपनी आवश्यकताओं के अनुरूप या वास्तव में उस पर जाँच करने के लिए ऊपर पायथन कोड का विस्तार कर सकते हैं।
$?जहाँ pythonनहीं पाया गया है उस मामले को संभालने के लिए आपको अपनी स्क्रिप्ट में जाँच करनी होगी ।
पुनश्च मैं थोड़ा अजीब सिंटैक्स का उपयोग कर रहा हूं ताकि पायथन 2.x और 3.x दोनों के साथ संगतता सुनिश्चित हो सके।
export PYTHON_VERSION=`python -c 'import sys; version=sys.version_info[:3]; print("{0}.{1}.{2}".format(*version))'`उस समाधान का उपयोग करके। नीचे रेगेक्स सामान की तुलना में बहुत अच्छा है।
if ! python3 -c 'import sys; assert sys.version_info >= (3,6)' > /dev/null; then
मैंने जाहिद के उत्तर का उपयोग एक स्ट्रिंग से एक्सट्रैक्ट वर्जन नंबर के साथ किया, ताकि वह शुद्ध रूप से शेल में कुछ लिखा जा सके। यह केवल एक संस्करण संख्या देता है, न कि "पायथन" शब्द। यदि स्ट्रिंग खाली है, तो पायथन स्थापित नहीं है।
version=$(python -V 2>&1 | grep -Po '(?<=Python )(.+)')
if [[ -z "$version" ]]
then
echo "No Python!"
fi
और मान लें कि आप संस्करण संख्या की तुलना यह देखना चाहते हैं कि क्या आप पायथन के अद्यतित संस्करण का उपयोग कर रहे हैं, संस्करण संख्या में अवधियों को हटाने के लिए निम्नलिखित का उपयोग करें। फिर आप पूर्णांक संचालकों का उपयोग करके संस्करणों की तुलना कर सकते हैं, जैसे "मुझे पायथन संस्करण 2.7.0 से अधिक और 3.0.0 से कम चाहिए"। संदर्भ: http://tldp.org/LDP/abs/html/parameter-sstst.html में $ {var // पैटर्न / प्रतिस्थापन}
parsedVersion=$(echo "${version//./}")
if [[ "$parsedVersion" -lt "300" && "$parsedVersion" -gt "270" ]]
then
echo "Valid version"
else
echo "Invalid version"
fi
आप प्लेटफ़ॉर्म मॉड्यूल का उपयोग कर सकते हैं जो मानक पायथन लाइब्रेरी का हिस्सा है:
$ python -c 'import platform; print(platform.python_version())'
2.6.9
यह मॉड्यूल आपको संस्करण स्ट्रिंग के केवल एक भाग को प्रिंट करने की अनुमति देता है :
$ python -c 'import platform; major, minor, patch = platform.python_version_tuple(); print(major); print(minor); print(patch)'
2
6
9
यहां यह प्रमाणित करने के लिए हैश का उपयोग करने का एक और उपाय है कि क्या अजगर स्थापित है और संस्करण के पहले दो प्रमुख नंबरों को निकालने के लिए sed है और यदि न्यूनतम संस्करण स्थापित है तो तुलना करें
if ! hash python; then
echo "python is not installed"
exit 1
fi
ver=$(python -V 2>&1 | sed 's/.* \([0-9]\).\([0-9]\).*/\1\2/')
if [ "$ver" -lt "27" ]; then
echo "This script requires python 2.7 or greater"
exit 1
fi
आप इस आदेश का उपयोग bash में कर सकते हैं:
PYV=`python -c "import sys;t='{v[0]}.{v[1]}'.format(v=list(sys.version_info[:2]));sys.stdout.write(t)";`
echo $PYV
यदि आप शेल स्क्रिप्ट में संस्करण की तुलना करना चाहते हैं तो sys.hexversion का उपयोग करना उपयोगी हो सकता है
ret=`python -c 'import sys; print("%i" % (sys.hexversion<0x03000000))'`
if [ $ret -eq 0 ]; then
echo "we require python version <3"
else
echo "python version is <3"
fi
संभावित समाधानों की लंबी सूची में जोड़कर, यहां एक समान है - स्वीकृत उत्तर - सिवाय इसके कि इसमें एक सरल संस्करण चेक बनाया गया है:
python -c 'import sys; exit(1) if sys.version_info.major < 3 and sys.version_info.minor < 5 else exit(0)'
यदि अजगर स्थापित है और कम से कम संस्करण 3.5, तो यह 0 पर वापस आ जाएगा और 1यदि:
3.5मूल्य की जांच करने के लिए, बस तुलना करें $?(मान लें bash), जैसा कि अन्य प्रश्नों में देखा गया है।
खबरदार कि यह अलग-अलग संस्करणों की जाँच करने की अनुमति नहीं देता है Python2- जैसा कि उपरोक्त वन-लाइनर Py2 में एक अपवाद को फेंक देगा। हालाँकि, चूंकि Python2यह दरवाजे से बाहर है, इसलिए यह कोई समस्या नहीं होनी चाहिए।
एक शेल स्क्रिप्ट में अजगर संस्करण 2+ या 3+ का पता लगाना:
# !/bin/bash
ver=$(python -c"import sys; print(sys.version_info.major)")
if [ $ver -eq 2 ]; then
echo "python version 2"
elif [ $ver -eq 3 ]; then
echo "python version 3"
else
echo "Unknown python version: $ver"
fi
यह जाँचने के लिए कि क्या कोई पायथन स्थापित है (यह पथ पर है), यह उतना ही सरल है:
if which python > /dev/null 2>&1;
then
#Python is installed
else
#Python is not installed
fi
> /dev/null 2>&1हिस्सा सिर्फ दबाने उत्पादन के लिए है।
वर्जन नंबर भी प्राप्त करने के लिए:
if which python > /dev/null 2>&1;
then
#Python is installed
python_version=`python --version 2>&1 | awk '{print $2}'`
echo "Python version $python_version is installed."
else
#Python is not installed
echo "No Python executable is found."
fi
पायथन 3.5 के साथ नमूना आउटपुट स्थापित किया गया: "पायथन संस्करण 3.5.0 स्थापित है।"
नोट 1: awk '{print $2}'यदि पायथन स्थापित नहीं है, तो यह हिस्सा सही ढंग से काम नहीं करेगा, इसलिए या तो ऊपर के नमूने में चेक का उपयोग करें, या सोहराब टीgrep द्वारा सुझाए अनुसार उपयोग करें । हालांकि Perl regexp सिंटैक्स का उपयोग करता है और इसमें कुछ पोर्टेबिलिटी समस्याएं हो सकती हैं।grep -P
नोट 2: python --versionया python -V2.5 से पहले पायथन संस्करणों के साथ काम नहीं कर सकता है। इस मामले python -c ...में अन्य उत्तरों में सुझाए अनुसार उपयोग करें ।
यदि आपको बैश स्क्रिप्ट की आवश्यकता है, तो "NoPython" को गूँजता है यदि पायथन स्थापित नहीं है, और पायथन संदर्भ के साथ यदि इसे स्थापित किया गया है, तो आप निम्न check_python.shस्क्रिप्ट का उपयोग कर सकते हैं ।
my_app.sh।PYTHON_MINIMUM_MAJORऔरPYTHON_MINIMUM_MINORcheck_python.sh
#!/bin/bash
# Set minimum required versions
PYTHON_MINIMUM_MAJOR=3
PYTHON_MINIMUM_MINOR=6
# Get python references
PYTHON3_REF=$(which python3 | grep "/python3")
PYTHON_REF=$(which python | grep "/python")
error_msg(){
echo "NoPython"
}
python_ref(){
local my_ref=$1
echo $($my_ref -c 'import platform; major, minor, patch = platform.python_version_tuple(); print(major); print(minor);')
}
# Print success_msg/error_msg according to the provided minimum required versions
check_version(){
local major=$1
local minor=$2
local python_ref=$3
[[ $major -ge $PYTHON_MINIMUM_MAJOR && $minor -ge $PYTHON_MINIMUM_MINOR ]] && echo $python_ref || error_msg
}
# Logic
if [[ ! -z $PYTHON3_REF ]]; then
version=($(python_ref python3))
check_version ${version[0]} ${version[1]} $PYTHON3_REF
elif [[ ! -z $PYTHON_REF ]]; then
# Didn't find python3, let's try python
version=($(python_ref python))
check_version ${version[0]} ${version[1]} $PYTHON_REF
else
# Python is not installed at all
error_msg
fi
my_app.sh
#!/bin/bash
# Add this before your app's code
PYTHON_REF=$(source ./check_python.sh) # change path if necessary
if [[ "$PYTHON_REF" == "NoPython" ]]; then
echo "Python3.6+ is not installed."
exit
fi
# This is your app
# PYTHON_REF is python or python3
$PYTHON_REF -c "print('hello from python 3.6+')";
अभी तक केवल प्रमुख और मामूली संस्करण संख्या के साथ एक पठनीय तरीके से पायथन संस्करण को प्रिंट करने का एक और तरीका है। उदाहरण के लिए, "3.8.3" के बजाय यह "38" प्रिंट करेगा, और "2.7.18" के बजाय यह "27" प्रिंट करेगा।
python -c "import sys; print(''.join(map(str, sys.version_info[:2])))"
पायथन 2 और 3 दोनों के लिए काम करता है।
यदि आपको यह जांचने की आवश्यकता है कि क्या संस्करण कम से कम 'कुछ संस्करण' है, तो मैं समाधान पसंद करता हूं जो संस्करण भागों में अंकों की संख्या के बारे में धारणा नहीं बनाता है।
VERSION=$(python -V 2>&1 | cut -d\ -f 2) # python 2 prints version to stderr
VERSION=(${VERSION//./ }) # make an version parts array
if [[ ${VERSION[0]} -lt 3 ]] || [[ ${VERSION[0]} -eq 3 && ${VERSION[1] -lt 5 ]] ; then
echo "Python 3.5+ needed!" 1>&2
return 1
fi
यह इस उत्तर से प्रेरित होकर 2.12.32 या 3.12.0 आदि की संख्या के साथ भी काम करेगा ।
सबसे आसान तरीका होगा:
if ! python3 --version ; then
echo "python3 is not installed"
exit 1
fi
# In the form major.minor.micro e.g. '3.6.8'
# The second part excludes the 'Python ' prefix
PYTHON_VERSION=`python3 --version | awk '{print $2}'`