Neden python 3 varsayılan python ikili değil?


42

I tipi pythonbir terminal penceresi. Python 2.7 ve Python 3.5 kullanıyorum. Dokümanlara göre, Python 3.5 önceden yüklenmiş olarak gelmelidir.


1
"Python3 -m venv my-venv" kullanarak sanal bir ortam kurduysanız, herhangi bir terminalden "source ... / my-env / bin / activate" diyerek bu sanal ortamı etkinleştirin, o zaman python 3.5 olacaktır. bu terminalde varsayılan. Geçerli varsayılan sürümü "python -V" ile çağırarak kontrol edebilirsiniz.
Craig Hicks

cevabınız faydalı olsa da neden diye sordum. nasıl değil. ve, bu büyük tartışma. İşte. neden eski sürüm yerine geçerli sürüm yerine eski sürüm kullanılmalı.
givonz

1
Benim "yorumum" konusunda tam olarak haklısın! Bu yüzden bir cevap yazdım, yorum yazdım.
Craig Hicks,

Yanıtlar:


56

Ne okuduğunuzu ve ne dediklerini okuduğunuzu bilmiyorum, ama bu /usr/bin/pythonsadece python'un varsayılan sürümüne sembolik bir bağlantıdır, bu durumda 2.7, sadece pythonterminale yazmanın sonucudur . Bu, PEP 394’ün ,

  • Şimdilik, tüm dağıtımlar pythonbunun aynı hedefi ifade etmesini sağlamalıdırpython2 .

type pythonve file /usr/bin/pythonbunu onaylayacaktır.

Kurallar dışındaki bu düzenlemenin sebebi , Xenial'daki python-defaults kaynak paketinin 2.7.11 sürümüdür , bu yüzden python sembolik bağlantısı bu sürüme işaret eder.

Python 3'ü kullanmak için açık python3olmanız ve belirli bir sürüme ihtiyaç duymanız durumunda önerilen komut satırına yazmanız gerekir; bu, python 2 yazarak da yapılabilir python2. Ubuntu, tüm güncel sürümlerde varsayılan olarak hem python 2 hem de 3 sürüm içerir.

Her şeyi python 3'e taşımayı ve varsayılan olarak işaretlemeyi planlıyor.


Bu muhtemelen, zeitgeiigeist-python3'e bağlı, ancak onu bulamayan ritim kutusu-zeitgeist eklentisini kırıyor.
Khurshid Alam

2
OP'nin ifade ettiği belge budur.
SaidbakR

10

Python 3.5 REPL'i edinmek veya uyumlu bir komut dosyasını çalıştırmak için yazın python3. Bu, tüm eski python 2.x ile uyumluluğunu korumaktır (her zaman olmuştur ve bağlı kalacaktır python).

Çizgi , bir terminal açmak ve örneğin REPL'i başlatmak için (in ) için pythonbir .desktopdosya kurduğunuzda bulabilirdi ~/.local/share/applications/. Python için varsayılan bir GUI REPL ortamı yoktur ve normal arayüz beklentileri kullanıcının terminale gideceği şeklindedir.

Python 3.5'in varsayılanı, tüm sistem komut dosyalarını python 2.x'ten python 3.x'e aktaran ve python 3'ün python 2'nin her durumda yerini alacağı yönündeki bakımcılardır.


öyleyse, doğru soruyu sanırım, python3'ü yoluma nasıl eklerim, böylece otomatik olarak çalışır?
givonz

Derlenmiş bir program gibi çalıştırmak için python scriptleri nasıl elde edersiniz?
Andrew Keech

Anladım, teşekkürler. sadece komut istemine python3 yazın.
givonz

2
AIUI / usr / bin / python ile uzun vadede yapılması gerekenler hala açık bir sorudur. Python2 komut dosyaları için en iyi yöntem açıkça python2 kullanmaktır.
Peter Green

1
komut dosyalarında #!/usr/bin/python3(veya #!/usr/bin/python2) kullanmak yerine , #!/usr/bin/env python3uzaktan taşınabilir olmasını istiyorsanız (yalnızca python için, özellikle) kullanmak daha iyidir . Çoğu zaman, bu sadece bir dokümantasyondur, çünkü çoğu durumda $ python3 your_pyprogram.pyyine de kullanılacaktır .
michael

4

Varsayılan Python'un mevcut olması gerektiğini varsayarsınız python. Bu varsayım yanlıştır.

Python 3 “önceden yüklenmiş” ve Python 2 olmayan bir sistemde, sadece python3ve hayır olacak python.

Python 3 için yazılmış kod her zaman adı verilen bir tercümana bakmalıdır python3. Python 2 için yazılmış kod tarihsel olarak arayacaktır python.

Zaman zaman, belki de on yıllardır, neredeyse hiç kimsenin Python 2'yi hatırlamaya pythonbaşlamaya gelmeyeceği bir nokta olabilir python3. Bu tamamen kolaylık sağlamak için olurdu ve erken olsa bile yapılmamalı ve yapılmamalıdır! Aşağıdaki etkiden dolayı acelesi yoktur:

“Mevcut eski” sistemler python2yalnızca bilgi sahibi olmayacak python, bu nedenle Python 2 kodunu aramaya devam etmek mükemmel bir anlam ifade ediyor python. pythonPython 2'ye “Python 2 kodu var olduğu sürece” neden başvurulmasının nedeni budur .

Python 2 için yazılmış yeni kod, eğer mantıklıysa, mükemmel şekilde arayabilir python. Ayrıca için görünebilir python2sadece Python 3 farkında ve bakımlı sistemleri (örneğin bağlantı sunmalıdır olan) üzerinde çalışacak şekilde tasarlanmıştır eğer.

Python 2 kodunu kullanmanın yararı, bir python2kez pythonatıfta bulunmaya başlayan python3, hiçbir zaman olamayacak, ya da bir kez hiç pythonkaybolacak ya da olmayacak bir anda dokunmaya gerek duymamasıdır. (Python 2 kod varsayımsal Python 4 yorumlayicisiyla ile popüler hale geldikten sonra dışarı ölürsek, gerçek gelebilir python4-. O da işaret izin Çünkü python3ya python4ikisi kafa karıştırabilir.)


2

Python her ikisi de 2.x, 3.x versiyonları mevcuttur. python'u çağırırsanız, python 2.x'e işaret ettiği gibi python 2.x'i yükler.

Aşağıdaki resim size yardımcı olacaktır.

görüntü tanımını buraya girin


1
Aynı komutu nasıl yazıp 2 farklı sonuç alıyorsunuz?
givonz

3
ikinci çağrıdan gelen farklı çıktı , otomatik tamamlayıcının sorgulanmasının pythonkullanılmasıdır <tab>, bu da daha sonra olası izinlerini çıktılar python*ve sizi yeni bir komut istemine döndürür.
Andrew Keech

@givonz, hmm Ben TAB anahtar kardeş kullandım. çıktı değil. Bu mümkün ikili desen.
rʒɑdʒɑ

Ne için olumsuz oy?
rʒɑdʒɑ

1
Oy vermedim ancak cevabın ilk 2 çıktının neden farklı olduğunu ve apt-cacheözellikle Ubuntu yeni başlayanlar için rolünün ne olduğunu açıklaması gerektiğini düşünüyorum .
AL

2

Python 3.x 16.04 ile çalışmalıdır - Aslında kesinlikle çalışacaktır. Ubuntu 14.04'üm var ve Python 3.4.3'üm var - Test etmek için yapmanız gereken tek şey yazın python3ve hangi sürümü kullandığınızı söylemelisiniz.


2
Bir işletim sistemi bilgisayar bilimi kullanarak arama olmaz. Ve kesinlikle konuşursak: Ubuntu, Linux tabanlı bir işletim sistemidir ve Unix tabanlı değildir.
magu_

diff komutunu linux & unix'in bazı komut istemlerinin yanı sıra farklı ifadeleri yanında, ancak yakından ifade edilen komutları anlayamadığını da henüz anlamadım. gui solaris'te gördüğümden çok daha ileri düzeyde olsa da.
givonz

1
-1 Bu neden sorusunu ele almaz .
David Foerster
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.