'Python' program komutunun Python 3'ü çalıştırması nasıl yapılır?


331

pythonProgram komutu Python 2. Python 3 kullanılarak yürütülebilir çalıştırır python3komutu. Python 3 pythonkomutu kullanılarak nasıl çalıştırılabilir ?


30
Sadece bir uyarı: / usr / bin / python sembolünü 2.7 yerine python3 ile değiştirmeye çalışmayın. Ubuntu depolarında bulunan birçok program, / usr / bin / python'un python 2.x ile uyumlu olmasını gerektirir.
soulsource

1
Ah, şimdi yükseltme ile ne demek istediğinizi anladım ... Aslında Ubuntu geliştiricileri bunun üzerinde çalışıyor: wiki.ubuntu.com/Python/3 "Ubuntu 14.04 LTS'nin masaüstünde sadece Python 3 olması bir sürüm hedefi. Görüntüler."
soulsource 17:13

1
Başka bir notta, Python 3'ü varsayılan yapmak için öğrenmeye çalıştıkları için buraya gelen herkes sanal ortamları (örneğin, sanalenv) veya kapları (örneğin, LXC veya Docker) araştırmada kullanabilir.
Kevin,

1
Ruh kaynağının en üstündeki uyarısına atıfta bulunarak, Python çalıştırılabilirleri için bir arada var olan ve Python programcılarının ve paket sağlayıcılarının güvendiği (ve olması gerektiği) adlandırma kurallarını standartlaştıran PEP 394'e bakınız .
David Foerster

2
@wjandrea, evet sanal ortamda bile, pythonanlam olarak tutulmalıdır python2. Yorumumu, sistemin Python'u üzerinde çalışmak yerine, uygulamaya özel bir Python sürümüne sahip olmanın bir yolu olarak kastettim.
Kevin,

Yanıtlar:


370

Basit bir güvenli yol, takma ad kullanmak olacaktır. Bunu ~/.bashrcveya ~/.bash_aliasesdosyasına yerleştirin:

alias python=python3

Yukarıdakileri dosyaya ekledikten sonra, source ~/.bashrcveya komutunu çalıştırın source ~/.bash_aliases.

Örneğin:

$ python --version
Python 2.7.6
$ python3 --version
Python 3.4.3
$ alias python=python3
$ python --version
Python 3.4.3

Takma adı atlamak için commandyerleşik komutu kullanın:

$ command python --version
Python 2.7.6

Takma adı atlamanın bir başka yolu \komuttan önce kullanmaktır .

$ \python --version 
Python 2.7.6

Geçerli kabuktaki diğer adını devre dışı bırakmak için unaliasyerleşik komutu kullanın:

$ unalias python
$ python --version
Python 2.7.6

1
bu yüzden hayır "yükseltme" seçeneği .. ??
Giri

4
Aslında 2.7'yi silmek ve onu 3.3 ile değiştirmek istiyorum. Şu an için kötü bir fikir gibi görünüyor ..
Giri

35
+1 ile çalışmak için 2.7'yi temizlemek için hiçbir sebep yoktur. 3.3. Pek çok yazılım hala 2.7'ye bağlı olduğundan; Sadece etrafta dolaşmaya devam et.
don.joey

6
@ begueradj Bir diğer ad sembolik bir bağlantıdan tamamen farklıdır .
Radu Rădeanu

1
Dikkatli bir kelime: bu Python 2.7 bekleyen diğer betikleri bozabilir.
kmiklas

85

[Haziran 2016] Geçiş hakkında bilgi almak için önerilen yer resmi Ubuntu Python sayfası.


Gönderen Ubuntu wiki :

Hem Ubuntu hem de Debian için, Python 3'ü dağıtımlarda varsayılan, tercih edilen Python sürümü yapmak için devam eden proje hedeflerimiz var .

Bu ne anlama gelmiyor:

  • /usr/bin/pythonPython 3'ü gösterecektir. Hayır, bu olmayacak ( öngörülebilir gelecek için şüpheli olan PEP 394 aksi belirtilmedikçe). /usr/bin/pythonve /usr/bin/python2Python 2.7'ye ve /usr/bin/python3en son desteklenen Python 3 sürümüne işaret edecektir.

  • Python 2 arşivden kaldırılacak. Hayır, bu olmayacak . PEP 373'ün 2020 yılına kadar yukarı yönde hata düzeltme bakım desteği vaat etmesi koşuluyla Python 2.7'nin Ubuntu'da oldukça uzun bir süre desteklenip kullanılabilir kalmasını bekliyoruz .

Diğer paket bağımlılıkları nedeniyle sembolik bağlantının değiştirilmesi tavsiye edilmez, ancak "dağıtımda Python 3'ü varsayılan, tercih edilen Python sürümü yapmak için devam eden proje hedefleri vardır".


Gibi CLI kullanımı için @Radu Rădeanu , ben Kullanıcının bir takma adı koyarak öneriyoruz ~/.bashrc, .bash_aliases(dahil olmak üzere farklı dosyaları, dosyanın ~/.bash_profile, en az bir kez yüklenir, örgütsel amaçlar için çoğunlukla, ancak platforma göre değişiklik gösterebilir). Python sanal ortamları da iyi çalışır.

Diğer ad örnekleri:

alias python=python3

veya

alias python='/usr/bin/python3'

Scriptler yine de #!/usr/bin/env python3çapraz uyumluluk için kullanmalı .

envSanal ortamlarda karma kullanım için kullanmak iyidir.

Not (@wjandrea sayesinde): takma adlar, kullanıcı ortamının değil, bash çalışma zamanının bir parçasıdır. Bu nedenle, shebang ( #!) için uygun değillerdir . Takma adı python = python3'ü tercih ederseniz, bir shebang program.pyolmayan bazıları , bunun gibi takma ad yorumlayıcıyı çağırarak çalıştırılabilir python program.py. Aliasing ayrıca 3.4 ve 3.6 gibi çoklu python3 sürümlerine sahip sistemler için de yararlı olabilir.


1
Bu şimdi güncel değil gibi görünüyor: Xenial'da python2'yi kaldırmayı planladılar, ancak sonra yapmadılar.
OrangeDog

1
@OrangeDog, güncelleme için teşekkürler. Evet, alıntı yaptığım wiki sayfası artık sadece Python 3'e geçme konusunda son iki yılda daha fazla ilerleme kaydedildiği için güncel değil olarak işaretlendi. Bu ilerlemeyi izleyen yeni sayfa resmi Ubuntu Python sayfası .
Kevin

Xenial'in planlarına ilişkin "son" sayfa da güncel değil.
OrangeDog

"Son zamanlarda güncellenmediği" kadar "güncel değil" demem. Yine de bu konuda mesaj tutmak için mevcut konum gibi görünüyor. Bununla birlikte, buradaki yorumlarda, birinin bulabileceği herhangi bir son kaynağı takdir ediyorum. Cevabıma neden daha fazla değişiklik yapmama konusunda daha fazla kaynak eklemek python, dönüşüm tamamlanıncaya kadar pek alakalı değil. O zaman bile, sadece bir sorun haline gelebilir.
Kevin

2
Takma adlar Bash'in içindedir, ortamın bir parçası değildir, bu yüzden hala python3bir shebang içinde kullanmanız gerekmeyecektir python.
wjandrea

28

Güncelleme: Yanlış yol, öğrendim, çünkü Python2 ve Python3 birbiriyle değiştirilemez.

Komut satırı aracını deneyebilirsiniz update-alternatives.

$ sudo update-alternatives --config python

Eğer "python için alternatif yok" hatasını alırsanız aşağıdaki komutu kullanarak kendinize bir alternatif ayarlayın:

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

/usr/bin/python3İstediğiniz python sürümüne göre yolu değiştirin .


19
python2 ve python3 alternatif değildir. Bu amaçla güncelleme alternatifleri kullanmayın.
jobin

Neden onlar değil? Biriniz neden update-alternativespython için uygun olmadığını açıklayabilir misiniz ? Legacy.python.org/dev/peps/pep-0394 nedeniyle mi?
Dmitry Grigoryev

11
alternatifler aynı işlevsellik için farklı uygulamalardır. python2 ve python3 aynı işlevleri sağlamamaktadır.
Ely,

Python3'ün diğer sürümlerini el ile yüklediyseniz (ppa veya başka bir yolla), bunun gibi bir şey yapabilirsiniz. sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
David Baucum

Bu python ile gelmeyen bir 18.04.2 vm için yapmam gereken şeydi. Thanks
Dark Star1

9

Ubuntu ve bu konuda Linux dağıtımlarının geri kalanı, hala birçok uygulama ve komut için Python 2.7'ye bağlı. "Python" varsayılan referansını Python 3.x olarak değiştirirseniz, bir dizi Python işlevi onaylama hataları atmaya başlar.

Örneğin, Ubuntu'da, bir dosya için 'pip', dosyayı doğrudan düzenlediğiniz ve shebang'ı '#! / Usr / bin / env python2.7' referansı olarak değiştirmediyseniz, artık doğru çalışmayacaktır. RHEL (Red Hat Enterprise Linux) Red Hat, Fedora ve CentOS gibi lezzetlerde, 'Yum' komutu aynı zamanda Python 2.7'ye de bağlıdır.

Buradaki amacım, Python 3.x referansını vermek için uçbirimde 'python' yazabilmeniz için onaylama hataları atmaya başlamanız için önemli miktarda kodun neden olacağıdır.

Terminaldeki 'python3' komutunu ve Python 3.x dosyalarınızdaki shebang '#! / Usr / bin / env python3' komutunu kullanarak çok daha iyisin.


2

Yap

cd ~
gedit .bash_aliases

sonra ikisini de yazın

alias python=python3

veya

alias python='/usr/bin/python3'

Dosyayı kaydedin, terminali kapatın ve tekrar açın.
bağlantı


1

Sen sembolik bir link olabilir /usr/bin/pythoniçin python3birlikte

sudo ln -s /usr/bin/python3 /usr/bin/python

Python 2 ve pip2’nin bir bağımlılık olarak yüklenmesini engelleyebilirsiniz.

sudo apt-mark hold python python-pip

Bunu neden yapmak istemediğinize ilişkin diğer cevaplara bakınız. Ubuntu 18.04+ artık Python 2 ile gelmiyor, bu yüzden çok kötü olmamalı.


2
İlişkin "Ubuntu 18.04 artık Python 2 ile geliyor, bu yüzden çok kötü olmamalıdır." , Ubuntu'da (varsayılan olarak Python 2 yüklü olmayan sürümlerde bile), çağrılan bir yürütülebilir dosyanın pythonPython 2 olduğu varsayılır, bu nedenle bazı şeyler bozulabilir.
wjandrea

* python->/usr/bin/python
wjandrea

0
cat > /usr/local/bin/py
#!/bin/dash
python3 "$@"
<CTRL-D>

(/ usr / local / bin dizinine yazma izniniz olması kaydıyla)

cat > /usr/local/bin/pyi
#!/bin/dash
python3 -i "$@"
<CTRL-D>

daha sonra sadece seçtiğiniz python için py yazın (ve #! satırında py kullanın).


Bir sembolik bağlantı kullanmak daha kolay olmaz mıydı? sudo ln -s /usr/bin/python3 /usr/local/bin/py
wjandrea

0

Sadece / usr / bin / python ve / usr / bin / pip dosyalarının kaldırılmasını çok yararlı buluyorum. Bu, tüm programları "python2" ve "python3" komutlarına güvenmeye zorlar.

İsteğe bağlı ve güncel olmayan bazı paketlerin #!/usr/bin/pythonçalışmaya bağlı olmasına rağmen , garip ve bazen hata ayıklaması zor hatalar yapmaya devam etmek yerine bu programlara düzeltme ekleri göndermeyi tercih ederim.


-1

update-alternativesUyumluluk sorunları nedeniyle farklı zamanlarda ihtiyaç duyabileceğiniz farklı program sürümleri sağlamak için kullanabilirsiniz .

Bu cevap, örneğin, farklı gcc / g ++ sürümlerini aynı anda sürdürmek için işleri nasıl ayarlayacağınıza iyi bir örnektir.

sadece python2.7 ve python 3.3 ile aynı şeyi yapın


2
Yeni başlayan kullanıcılar, bağlantılı yanıtları farklı durumlara kolayca uyarlayamayabilirler. Önceki cevabı alacak olmasının yanı sıra, Python için gereken adımları ortaya koymak iyi olur.
chaskes

İşte ben iyi bir adım çözüm adım buldum olduğunu linuxconfig.org/...
woto

Python 2 ve 3 alternatif değil - farklı küçük sürümler bile değil ( örn. ). Bu yöntem kolayca şeyleri kırabilir.
wjandrea

Ayrıca bu, bu cevabın
wjandrea
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.