Tôi muốn phát hiện xem python đã được cài đặt trên hệ thống Linux chưa và nếu có, phiên bản python nào đã được cài đặt.
Tôi làm nó như thế nào? Có điều gì đó duyên dáng hơn việc phân tích cú pháp đầu ra của "python --version"
?
Tôi muốn phát hiện xem python đã được cài đặt trên hệ thống Linux chưa và nếu có, phiên bản python nào đã được cài đặt.
Tôi làm nó như thế nào? Có điều gì đó duyên dáng hơn việc phân tích cú pháp đầu ra của "python --version"
?
python --version
. Bạn cần sử dụng python -V
.
Câu trả lời:
Bạn có thể sử dụng một cái gì đó dọc theo các dòng sau:
$ python -c 'import sys; print(sys.version_info[:])'
(2, 6, 5, 'final', 0)
Tuple được ghi lại ở đây . Bạn có thể mở rộng mã Python ở trên để định dạng số phiên bản theo cách phù hợp với yêu cầu của bạn hoặc thực sự để thực hiện kiểm tra nó.
Bạn sẽ cần kiểm tra $?
tập lệnh của mình để xử lý trường hợp python
không tìm thấy.
Tái bút Tôi đang sử dụng cú pháp hơi kỳ lạ để đảm bảo khả năng tương thích với cả Python 2.x và 3.x.
export PYTHON_VERSION=`python -c 'import sys; version=sys.version_info[:3]; print("{0}.{1}.{2}".format(*version))'`
sử dụng giải pháp đó. Đẹp hơn nhiều so với những thứ regex bên dưới.
if ! python3 -c 'import sys; assert sys.version_info >= (3,6)' > /dev/null; then
Tôi đã sử dụng câu trả lời của Jahid cùng với số phiên bản Trích xuất từ một chuỗi để tạo một thứ gì đó được viết hoàn toàn bằng shell. Nó cũng chỉ trả về số phiên bản chứ không phải từ "Python". Nếu chuỗi trống, Python chưa được cài đặt.
version=$(python -V 2>&1 | grep -Po '(?<=Python )(.+)')
if [[ -z "$version" ]]
then
echo "No Python!"
fi
Và giả sử bạn muốn so sánh số phiên bản để xem liệu bạn có đang sử dụng phiên bản Python cập nhật hay không, hãy sử dụng phần sau để xóa các dấu chấm trong số phiên bản. Sau đó, bạn có thể so sánh các phiên bản bằng cách sử dụng toán tử số nguyên như "Tôi muốn phiên bản Python lớn hơn 2.7.0 và nhỏ hơn 3.0.0". Tham khảo: $ {var // Pattern / Replacement} trong http://tldp.org/LDP/abs/html/parameter-substitution.html
parsedVersion=$(echo "${version//./}")
if [[ "$parsedVersion" -lt "300" && "$parsedVersion" -gt "270" ]]
then
echo "Valid version"
else
echo "Invalid version"
fi
Bạn có thể sử dụng mô-đun nền tảng là một phần của thư viện Python chuẩn:
$ python -c 'import platform; print(platform.python_version())'
2.6.9
Mô-đun này chỉ cho phép bạn in một phần của chuỗi phiên bản:
$ python -c 'import platform; major, minor, patch = platform.python_version_tuple(); print(major); print(minor); print(patch)'
2
6
9
Đây là một giải pháp khác sử dụng hàm băm để xác minh xem python đã được cài đặt hay chưa và sed để trích xuất hai số chính đầu tiên của phiên bản và so sánh xem phiên bản tối thiểu đã được cài đặt chưa
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
sử dụng sys.hexversion có thể hữu ích nếu bạn muốn so sánh phiên bản trong shell script
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
Thêm vào danh sách dài các giải pháp khả thi, đây là một giải pháp tương tự với câu trả lời được chấp nhận - ngoại trừ điều này có một kiểm tra phiên bản đơn giản được tích hợp sẵn:
python -c 'import sys; exit(1) if sys.version_info.major < 3 and sys.version_info.minor < 5 else exit(0)'
điều này sẽ trả về 0 nếu python được cài đặt và có ít nhất các phiên bản 3.5
và trả về 1
nếu:
3.5
Để kiểm tra giá trị, chỉ cần so sánh $?
(giả định bash
), như đã thấy trong các câu hỏi khác.
Hãy lưu ý rằng điều này không cho phép kiểm tra các phiên bản khác nhau Python2
- vì một lớp lót ở trên sẽ tạo ra một ngoại lệ trong Py2. Tuy nhiên, vì Python2
nó đang trên đường ra khỏi cửa, đây không phải là một vấn đề.
Phát hiện phiên bản python 2+ hoặc 3+ trong tập lệnh shell:
# !/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
Để kiểm tra xem BẤT KỲ Python nào được cài đặt (xem xét nó trên PATH), nó đơn giản như sau:
if which python > /dev/null 2>&1;
then
#Python is installed
else
#Python is not installed
fi
Phần > /dev/null 2>&1
ở đó chỉ để ngăn chặn đầu ra.
Để nhận số phiên bản cũng:
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
Đầu ra mẫu có cài đặt Python 3.5: "Phiên bản Python 3.5.0 đã được cài đặt."
Lưu ý 1: Các awk '{print $2}'
bộ phận sẽ không làm việc một cách chính xác nếu Python không được cài đặt, do đó, hoặc sử dụng bên trong kiểm tra như trong ví dụ trên, hoặc sử dụng grep
theo đề nghị của Sohrab T . Mặc dù grep -P
sử dụng cú pháp Perl regexp và có thể có một số vấn đề về tính di động.
Lưu ý 2: python --version
hoặc python -V
có thể không hoạt động với các phiên bản Python trước 2.5. Trong trường hợp này, sử dụng python -c ...
như gợi ý trong các câu trả lời khác.
Trong trường hợp bạn cần một tập lệnh bash, nó sẽ vang lên "NoPython" nếu Python chưa được cài đặt và với tham chiếu Python nếu nó được cài đặt, thì bạn có thể sử dụng check_python.sh
tập lệnh sau .
my_app.sh
.PYTHON_MINIMUM_MAJOR
vàPYTHON_MINIMUM_MINOR
check_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+')";
Tuy nhiên, một cách khác để in phiên bản Python theo cách máy có thể đọc được với chỉ số phiên bản chính và phụ. Ví dụ: thay vì "3.8.3" nó sẽ in "38" và thay vì "2.7.18" nó sẽ in "27".
python -c "import sys; print(''.join(map(str, sys.version_info[:2])))"
Hoạt động cho cả Python 2 và 3.
Nếu bạn cần kiểm tra xem phiên bản có ít nhất là 'một số phiên bản' hay không, thì tôi thích giải pháp không đưa ra giả định về số chữ số trong các phần của phiên bản.
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
Điều này sẽ hoạt động ngay cả với đánh số như 2.12.32 hoặc 3.12.0, v.v. Lấy cảm hứng từ câu trả lời này .