ฉันมี Python เวอร์ชันใด


73

ฉันจะรู้ได้อย่างไรว่าฉันมี Python เวอร์ชันใด?

ฉันใช้ Ubuntu 14.04 (Trusty Tahr)


4
นอกจากนี้วิธีที่รวดเร็วในการดูว่ามีการติดตั้งไพ ธ อนแบบใด:ls /usr/bin | grep python
Tejas Kale

1
@TejasKale ดีกว่าที่จะเรียกใช้ls /usr/bin/python*(หรือls /usr/bin/*python*ถ้าคุณจริงๆต้องการไฟล์ที่มีpython ที่ใดก็ได้ในชื่อ) ด้วยวิธีนี้lsยังคงจัดรูปแบบเอาต์พุตสำหรับเทอร์มินัล (และคุณจะได้รับคอลัมน์จำนวนมากและด้วยlsนามแฝงเริ่มต้นใน Ubuntu, การทำสี)
Eliah Kagan

คำตอบ:


86

คุณสามารถใช้python -V(et al.) เพื่อแสดงเวอร์ชันของ Python ที่pythonคำสั่งแก้ไขได้ หากนั่นคือทั้งหมดที่คุณต้องการคุณทำเสร็จแล้ว แต่การที่จะเห็นว่าทุกไพ ธ อนในระบบของคุณใช้เวลามากขึ้น

ใน Ubuntu readlink -f $(which python)เราสามารถตรวจสอบความละเอียดด้วย ในกรณีที่ค่าเริ่มต้นใน 14.04 /usr/bin/python2.7นี้ก็จะชี้ไปที่

เราสามารถโยงสิ่งนี้เข้าด้วยกันเพื่อแสดงเวอร์ชันของ Python เวอร์ชันนั้น:

$ readlink -f $(which python) | xargs -I % sh -c 'echo -n "%: "; % -V'
/usr/bin/python2.7: Python 2.7.6

แต่นี่ก็แค่บอกเราว่าการpythonแก้ปัญหาปัจจุบันของเราคืออะไร หากเราอยู่ใน Virtualenv (ระบบการจัดการแบบ Python ทั่วไป) pythonอาจแก้ไขเป็นเวอร์ชั่นอื่น:

$ readlink -f $(which python) | xargs -I % sh -c 'echo -n "%: "; % -V'
/home/oli/venv/bin/python: Python 2.7.4

นี่คือผลลัพธ์ที่แท้จริง

ความจริงก็คืออาจมี Python เวอร์ชันที่แตกต่างกันหลายร้อยเวอร์ชันหลั่งออกไปรอบ ๆ ระบบของคุณทั้งบนเส้นทางที่เพิ่มบริบทหรือใช้ชีวิตภายใต้ชื่อไบนารีที่ต่างกัน (เช่นpython3)

หากเราสมมติว่าไบนารี Python จะถูกเรียกpython<something>และเป็นไฟล์ไบนารีเราสามารถค้นหาไฟล์ทั้งหมดที่ตรงกับเกณฑ์เหล่านั้นได้:

$ sudo find / -type f -executable -iname 'python*' -exec file -i '{}' \; | awk -F: '/x-executable; charset=binary/ {print $1}' | xargs readlink -f | sort -u | xargs -I % sh -c 'echo -n "%: "; % -V'
/home/oli/venv/bin/python: Python 2.7.4
/media/ned/websites/venvold/bin/python: Python 2.7.4
/srv/chroot/precise_i386/usr/bin/python2.7: Python 2.7.3
/srv/chroot/trusty_i386/usr/bin/python2.7: Python 2.7.6
/srv/chroot/trusty_i386/usr/bin/python3.4: Python 3.4.0
/srv/chroot/trusty_i386/usr/bin/python3.4m: Python 3.4.0
/usr/bin/python2.7: Python 2.7.6
/usr/bin/python2.7-dbg: Python 2.7.6
/usr/bin/python3.4: Python 3.4.0
/usr/bin/python3.4dm: Python 3.4.0
/usr/bin/python3.4m: Python 3.4.0
/web/venvold/bin/python: Python 2.7.4

เห็นได้ชัดว่ามันเป็นคำสั่งที่น่าเกลียด แต่นี่เป็นผลลัพธ์ที่แท้จริงอีกครั้งและดูเหมือนว่าจะทำงานได้อย่างทั่วถึง


ฉันได้รับสิ่งต่อไปนี้และฉันไม่แน่ใจว่ามันหมายถึงอะไร: readlink: extra operand '/usr/bin/python2.7' Try 'readlink --help' for more information.
hello_there_andy

ฉันสันนิษฐานว่าpython -vจะส่งคืนเวอร์ชันและดำเนินการสิ่งนี้เป็นรูต มันพิมพ์รายการสิ่งต่าง ๆ มากมาย แต่ที่ด้านบนมันบอกว่าinstalling zipimport hookและตอนนี้ดูเหมือนว่าฉันอยู่ในโปรแกรมที่ฉันไม่รู้ว่าจะออกไปได้อย่างไร คุณช่วยฉันออกจากที่นี่ได้
ไหม

2
@Anthony แฟล็ก-Vสำหรับเวอร์ชันคำนึงถึงขนาดตัวพิมพ์ python -vกำหนดให้คุณอยู่ในคอนโซล Python โดยเปิดข้อความอย่างละเอียด ควบคุม + D เพื่อออก หรือเขียนexit()และกดปุ่มย้อนกลับ
Oli

@hello_there_andy ฉันเดาว่าคุณพิมพ์ผิดเมื่อคุณคัดลอกคำสั่ง
wjandrea

63

พิมพ์ดังต่อไปนี้ในเทอร์มินัล ( Ctrl+ Alt+ T):

python -V

หรือ

python --version

คุณสามารถค้นหารายการของตัวเลือก / พารามิเตอร์สำหรับคำสั่งต่าง ๆ ในเทอร์มินัลโดยพิมพ์คำสั่งตามด้วย- ช่วย

ตัวอย่าง:

python --help

คู่มือ / manpages ยังสามารถใช้ได้สำหรับที่สุดของ CLI ดังกล่าวซึ่งสามารถแสดงได้โดยman <command>(Ex: man python)

จากman python:

COMMAND LINE OPTIONS
        -V ,  --version
              Prints the Python version number of the executable and exits.

นอกจากนี้ยังมีการpython3ติดตั้งในเครื่องหลายเครื่องดังนั้นคุณสามารถ:

python3 --version

เพื่อดูว่าคุณใช้ python 3.x แบบไหน


2
เป็นที่น่าสังเกตว่า @Florian Diesch ด้านล่างเป็นชื่อที่คุณน่าจะมี "python" หลายรุ่น ค่าเริ่มต้น "python" จะชี้ไปที่การติดตั้ง python 2.7 แม้ว่า Ubuntu 14.04 จะมาพร้อมกับ python 3.0 เช่นกัน
มิทช์

32
python --version

และ

python2 --version

แสดงเวอร์ชั่นของ Python 2.x

python3 --version

Python 3.x เวอร์ชันที่ติดตั้ง


8

เมื่อคุณรันpythonในเทอร์มินัลเครื่องจะสร้างเอาต์พุตดังนี้:

Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

ดูบรรทัดแรก - Python 2.7.6.

python3นอกจากนี้ยังเรียกใช้ ฉันมี 3.4.1

Python 3.4.1 (default, Jul 31 2014, 12:46:17) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

อย่างไรก็ตามสิ่งนี้จะไม่แสดงให้คุณเห็นทั้งหมด ถ้าคุณมี python 3.Xx 2 เวอร์ชั่นขึ้นไปคุณจะเห็นเวอร์ชั่นล่าสุดเท่านั้น

โดยค่าเริ่มต้นใน 14.04 คุณมี 2.7.6 และ 3.4.0 อย่างที่คุณเห็นฉันได้อัปเดตเป็น 3.4.1 ฉันรู้ว่าฉันยังคงมี 3.4.0 เพราะเมื่อฉันไปที่/usr/binฉันเห็นpython3.4และถ้าฉันทำงาน/usr/bin/python3.4ในบรรทัดคำสั่งฉันได้รับ 3.4.0 และการทำงาน/usr/local/bin/python3.4ให้ฉัน 3.4.1

สรรพนามของฉันคือเขา / เขา


"ถ้าคุณมี python 3.Xx 2 รุ่นขึ้นไปคุณจะเห็นเพียงรุ่นล่าสุด" มันจะไม่แสดงว่าอันไหนที่มีไดเร็กทอรีที่มีอยู่ในรายการเป็นอันดับแรกในPATHตัวแปรสภาพแวดล้อมหรือไม่ ทำไมจะทำงานpython3มักจะเรียกใช้สูงสุด (ย่อย) รุ่น python3 ที่ติดตั้ง? หรือในทางปฏิบัติมันจะไม่แสดงเวอร์ชัน/usr/bin/python3ลิงก์สัญลักษณ์ที่ชี้ว่าไม่จำเป็นต้องเป็นเวอร์ชันล่าสุดหรือไม่
Eliah Kagan

@Eliah ไม่มีความคิด แต่มีบางโปรแกรมที่นำมาจากที่นั่นและรายการอื่น ๆ จากรายการ/usr/binเดียว ...
ทิม

2
ดีเมื่อมันมาถึงการทำงานจริงโปรแกรมหลามขึ้นอยู่กับวิธีที่พวกเขาจะทำงานที่สาย hashbangอาจถูกใช้เพื่อตรวจสอบว่างูหลามทำหน้าที่เป็นล่าม ( รายละเอียด ; ยังทราบการใช้งานenvในสาย hashbangเพื่อหาแล้วแต่จำนวนใดจะตีความว่าอาจจะเป็นระบบ -preferredในที่พบบ่อยในสคริปต์งูใหญ่ ) ฉันไม่แน่ใจว่านั่นคือสิ่งที่คุณหมายถึงโดยความแตกต่างระหว่างบางโปรแกรมและอื่น ๆ
Eliah Kagan

ไม่ผู้ใช้บอกว่าไม่มีการใช้งานรันกับ 3.4.0 และบรรทัดคำสั่งที่มี 3.4.1 ...
ทิม

5

นอกจากนี้คุณยังสามารถตรวจสอบเวอร์ชัน Python จากโค้ดเองโดยใช้platformโมดูลจากไลบรารีมาตรฐาน มีสองฟังก์ชั่น: platform.python_version()(ส่งคืนสตริง) และplatform.python_version_tuple()(คืน tuple) สคริปต์:

import platform

print(platform.python_version())
print(platform.python_version_tuple())

วิ่ง:

$ python test.py 
3.4.1
('3', '4', '1')
$ python2.7 test.py 
2.7.8
('2', '7', '8')

3
ฉันคิดว่ามันเป็นเรื่องปกติมากขึ้นเพื่อใช้หรือsys.version sys.version_info
Matt Nordhoff

5

compgen -c pythonหากคุณต้องการที่จะเห็นทุกรุ่นของงูใหญ่ใช้ได้เป็นคำสั่งที่เรียกใช้ เช่น:

$ compgen -c python
python2.7
python3.4m
python3.4
python3m
python
python3
python2

หากคุณต้องการรับเวอร์ชันของแต่ละข้อข้างต้นต่อไปนี้เป็นหนึ่งซับ

$ for p in $(compgen -c python); do printf "%-16s" $p; $p --version; done
python2.7      Python 2.7.6
python3.4m     Python 3.4.3
python3.4      Python 3.4.3
python3m       Python 3.4.3
python         Python 2.7.6
python3        Python 3.4.3
python2        Python 2.7.6

ปรับปรุง: python*-config

ฉันสังเกตเห็นว่าpython*-configโปรแกรมไม่สนับสนุนการ--versionตั้งค่าสถานะ ตัวอย่างเช่น:

$ python3-config --version
Usage: /usr/bin/python3-config --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--help|--abiflags|--configdir

ดังนั้นคุณสามารถกรองพวกมันออกด้วยgrep -vตัวอย่างเช่น:

compgen -c python | grep -v -- '-config$'

นี่ควรเป็นคำตอบที่ดีที่สุดฉันเดา
โซโลมอน Vimal

2

เปิดเทอร์มินัลอย่างง่ายดายและทำสิ่งต่อไปนี้:

เขียน

python

เพื่อตรวจสอบเวอร์ชั่น 2.x ของคุณในกรณีของฉันมันจะปรากฏขึ้น:

Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.

สำหรับ 3.x เขียน:

python3

ในกรณีของฉันมันปรากฏขึ้น:

Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.

สำหรับทั้งสองกรณีการออกจาก Python shell ให้เขียน:

 exit()

1
  • ในเชลล์เทอร์มินัล

    $ which -a pythonpythonทุกรายการของคุณ

    $ which -a python2.7python2.7ทุกรายการของคุณ

    $ /usr/bin/python -V/usr/bin/pythonให้ข้อมูลเกี่ยวกับรุ่นของ

  • ตรวจสอบในสคริปต์หลาม

นี่เป็นความผิดพลาดใน ipython shell:

In [1]: import sys

In [2]: sys.version
2.7.11 |Anaconda 2.5.0 (64-bit)| (default, Dec  6 2015, 18:08:32) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]

In [3]: sys.version_info
sys.version_info(major=2, minor=7, micro=11, releaselevel='final', serial=0)

In [4]: sys.version_info >= (2,7)
Out[4]: True

In [5]: sys.version_info >= (3,)
Out[5]: False

ฉันสันนิษฐานว่าpython -vจะส่งคืนเวอร์ชันและดำเนินการสิ่งนี้เป็นรูต มันพิมพ์รายการสิ่งต่าง ๆ มากมาย แต่ที่ด้านบนมันบอกว่าinstalling zipimport hookและตอนนี้ดูเหมือนว่าฉันอยู่ในโปรแกรมที่ฉันไม่รู้ว่าจะออกไปได้อย่างไร คุณช่วยฉันออกจากที่นี่ได้
ไหม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.