Hangi Python sürümüne sahibim?


73

Hangi Python sürümlerine sahip olduğumu nasıl öğrenebilirim?

Ubuntu 14.04 (Güvenilir Tahr) kullanıyorum.


4
Ayrıca, python ikili dosyalarının yüklü olduğunu görmenin hızlı bir yolu şöyledir:ls /usr/bin | grep python
Tejas Kale

1
@TejasKale Çalıştırılması daha iyi ls /usr/bin/python*(ya ls /usr/bin/*python*da gerçekten adın python herhangi bir yerinde dosyaları istiyorsanız ,). Bu şekilde, lshala bir terminal için çıktısını biçimlendirir (ve lsUbuntu'daki varsayılan diğer adıyla renklendirme yaparsınız).
Eliah Kagan

Yanıtlar:


86

Komutun çözümlediği python -VPython sürümünü göstermek için (ve ark.) Kullanabilirsiniz python. Tek ihtiyacın olan buysa, bitirdin. Ancak sisteminizde her python sürümünü görmek biraz daha fazla zaman alır.

Ubuntu'da çözünürlüğü ile kontrol edebiliriz readlink -f $(which python). Varsayılan durumda 14.04 bu sadece işaret eder /usr/bin/python2.7.

Bunu Python sürümünün sürümünü göstermek için zincirleyebiliriz:

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

Fakat bu hala bize şu anki pythonkararımızın ne olduğunu söylüyor . Bir Virtualenv'deysek (ortak bir Python yığın yönetim sistemi) pythonfarklı bir sürüme çözülebilir:

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

Bu gerçek çıktı.

Gerçek şu ki, sisteminize eklenmiş yüzlerce farklı Python sürümü olabilir, bunlar içeriğe eklenmiş yollarda veya farklı ikili isimler altında (ya da benzeri python3) yaşarlar .

Bir Python ikili dosyasının her zaman çağrılacağını python<something>ve ikili bir dosya olacağını varsayarsak , tüm sistemi bu kriterlere uyan dosyalar için arayabiliriz:

$ 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

Açıkçası oldukça çirkin bir emir ama bu yine gerçek çıktı ve oldukça kapsamlı bir iş yapmış gibi görünüyor.


Aşağıdakileri alıyorum ve ne anlama geldiğinden emin değilim:readlink: extra operand '/usr/bin/python2.7' Try 'readlink --help' for more information.
hello_there_andy

varsayılan python -vsürümü döndüreceğini ve bunu root olarak çalıştırdığını varsaydım . uzun bir şeyler listesi bastırdı, ama en tepede dedi installing zipimport hookve şimdi sanki nasıl çıkarılacağıma dair hiçbir fikrim olmayan bir programdaymışım gibi görünüyor. Bana burada yardım edebilir misin
BugWhisperer

2
@Anthony -VSürüm bayrağı büyük / küçük harf duyarlıdır. python -vsizi ayrıntılı mesajların açık olduğu bir Python konsoluna koyun. Çıkmak için Control + D tuşlarına basın. Veya yazıp exit()geri dönüş tuşuna basın.
Oli

@hello_there_andy Komutu kopyaladığınızda bir yazım hatası yaptınız galiba.
wjandrea

63

Terminalde aşağıdakileri yazın ( Ctrl+ Alt+ T):

python -V

veya

python --version

Terminalde birçok komut için bir seçenek / parametre listesi bulabilirsiniz, ardından komutu yazın --help

Örnek:

python --help

Görüntülenebilir olan bu CLI çoğu için de kullanılabilir El / Elyordamsayfalarının man <command>(Örnek: man python)

Kimden man python:

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

Ayrıca python3birçok makineye kuruludur, böylece:

python3 --version

Hangi python 3.x çalıştırdığınızı bulmak için.


2
@Florian Diesch altında, muhtemelen "python" un birden fazla versiyonuna sahip olduğunuza değiniyor. Varsayılan "python" çağrısı python 2.7 kurulumuna işaret eder, ancak ubuntu 14.04 python 3.0 ile birlikte gelir.
Mitch,

32
python --version

ve

python2 --version

Python 2.x sürümünü gösterir,

python3 --version

Python 3.x'in yüklü sürümü


8

pythonTerminale girdiğinizde , şöyle bir çıktı üretecektir:

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.
>>> 

İlk satıra bakın - Python 2.7.6.

Ayrıca koş 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.
>>>

Ancak, bu size hepsini göstermeyecek. 2 veya daha fazla python 3.Xx sürümünüz varsa, yalnızca sonuncusunu göreceksiniz.

14.04'te varsayılan olarak, 2.7.6 ve 3.4.0'a sahipsiniz. Gördüğünüz gibi ben 3.4.1'e yükselttim. Ben ben gidince çünkü hala 3.4.0 olduğunu biliyoruz /usr/bingörüyorum python3.4ve ben çalıştırırsanız /usr/bin/python3.4komut satırında, ben 3.4.0 olsun ve koşu /usr/local/bin/python3.4bana 3.4.1 verir

Zamirlerim O / O'dur


"2 veya daha fazla python 3.Xx sürümünüz varsa, yalnızca sonuncusunu göreceksiniz." Bunun yerine hangisinin içerdiği dizini PATHçevre değişkeninde ilk sıraya koyduğunu göstermez mi? Neden çalışan python3her zaman yüklü olan python3'ün en yüksek (alt) versiyonunu çalıştırsın ? Veya pratikte, /usr/bin/python3sembolik bağlantının hangi versiyonuna işaret ettiğini, hangisinin en son olması gerekmediğini göstermeyecek mi?
Eliah Kagan

@Eliah Hiç bir fikrim yok, ancak bazı programlar onu oradan ve diğerleri de /usr/binbirinden alıyor ...
Tim

2
Aslında, gerçekten çalışan python programları söz konusu olduğunda, nasıl çalıştırıldıklarına bağlı olarak, hangi pythonun tercüman olarak hareket edeceğini belirlemek için hashbang hattı kullanılabilir ( ayrıntılar ; ayrıca , envhangisinin yorumlandığını bulmak için hashbang hatlarında kullanıldığına dikkat edin) -preferred içinde Python komut ortak ). Bazı programlar ve diğerleri arasındaki farklarla ne demek istediğinizi anlamadığınızdan emin değilim.
Eliah Kagan

Hayır, kullanıcı boşta 3.4.0 ve komut satırı 3.4.1 ile çalıştığını söyledi ...
Tim

5

Ayrıca Python sürümünü platformstandart kütüphaneden gelen modülü kullanarak kodun kendisinden de kontrol edebilirsiniz . İki fonksiyon vardır: platform.python_version()(string döndürür) ve platform.python_version_tuple()( string döndürür). Senaryo:

import platform

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

Koşu:

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

3
Ben kullanımı daha yaygın olduğunu düşünüyorum sys.versionya sys.version_info.
Matt Nordhoff

5

Tüm Python sürümlerini komut olarak görmek istiyorsanız, çalıştırın compgen -c python. Örneğin:

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

Yukarıdakilerin her birinin sürümünü edinmek istiyorsanız, işte bir liner:

$ 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

Güncelleme: python*-config

python*-configProgramların --versionbayrağı desteklemediğini fark ettim . Örneğin:

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

Böylece onları filtreleyebilirsiniz grep -v, örneğin:

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

Bu en iyi cevap olmalı, sanırım.
Solomon Vimal

2

Kolayca terminali açın ve aşağıdakileri yapın:

Yazmak

python

2.x sürümünüzü doğrulamak için Benim durumumda görülecektir:

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 için şunu yazın:

python3

Benim durumumda, görünür:

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.

Her iki durumda da Python kabuğundan çıkmak için şunu yazın:

 exit()

1
  • Kabuk terminalinde

    $ which -a pythonhepsini listeler python.

    $ which -a python2.7hepsini listeler python2.7.

    $ /usr/bin/python -Vsürümü hakkında bilgi verir /usr/bin/python.

  • python betiğinde kontrol et

ipython kabuğundaki bir ilustration:

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

varsayılan python -vsürümü döndüreceğini ve bunu root olarak çalıştırdığını varsaydım . uzun bir şeyler listesi bastırdı, ama en tepede dedi installing zipimport hookve şimdi sanki nasıl çıkarılacağıma dair hiçbir fikrim olmayan bir programdaymışım gibi görünüyor. Bana burada yardım edebilir misin
BugWhisperer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.