Bagaimana cara membuat perintah program 'python' mengeksekusi Python 3?

331

The pythonperintah Program mengeksekusi Python 2. Python 3 dapat dieksekusi dengan menggunakan python3perintah. Bagaimana Python 3 dapat dieksekusi menggunakan pythonperintah?

Giri
sumber
30
Hanya peringatan: Jangan mencoba mengubah symlink / usr / bin / python untuk menunjuk ke python3, bukannya 2.7. Banyak program yang tersedia di repo Ubuntu membutuhkan / usr / bin / python agar kompatibel dengan python 2.x.
soulsource
1
Ah, sekarang saya mendapatkan apa yang Anda maksud dengan peningkatan ... Sebenarnya pengembang Ubuntu sedang mengerjakannya: wiki.ubuntu.com/Python/3 "Ini adalah tujuan rilis untuk Ubuntu 14.04 LTS untuk hanya memiliki Python 3 pada CD desktop gambar-gambar."
soulsource
1
Pada catatan lain, siapa pun yang datang ke sini karena mereka mencoba belajar tentang membuat Python 3 sebagai default, sebagai gantinya dapat digunakan untuk meneliti lingkungan virtual (misalnya virtualenv) atau wadah (mis. LXC atau Docker).
Kevin
1
Mengacu pada peringatan soulsource di bagian atas, lihat PEP 394 yang menstandarkan konvensi penamaan untuk executable Python yang ada bersama dan yang diandalkan oleh programmer dan pengelola paket Python (dan harusnya) mengandalkan.
David Foerster
2
@wjandrea, ya bahkan dalam lingkungan virtual, pythonharus dijaga sebagai makna python2. Maksud saya komentar saya sebagai cara untuk memiliki aplikasi versi Python khusus daripada mencoba untuk bekerja di sekitar sistem Python.
Kevin

Jawaban:

370

Cara aman sederhana adalah dengan menggunakan alias. Tempatkan ini ke dalam ~/.bashrcatau ~/.bash_aliasesfile:

alias python=python3

Setelah menambahkan di atas dalam file, jalankan source ~/.bashrcatau source ~/.bash_aliases.

Sebagai contoh:

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

Untuk menghindari alias gunakan commandperintah bawaan:

$ command python --version
Python 2.7.6

Cara lain untuk menghindari alias adalah menggunakan \sebelum perintah.

$ \python --version 
Python 2.7.6

Untuk menonaktifkan alias di shell saat ini, gunakan unaliasperintah bawaan:

$ unalias python
$ python --version
Python 2.7.6
Radu Rădeanu
sumber
1
jadi tidak ada opsi "upgrade" .. ??
Giri
4
sebenarnya saya ingin menghapus 2.7 dan menggantinya dengan 3.3. Sepertinya ini ide yang buruk untuk saat ini ..
Giri
35
+1 tidak ada alasan untuk membersihkan 2.7 agar dapat bekerja dengan 3.3. Karena banyak perangkat lunak masih tergantung pada 2.7; biarkan saja tetap di sekitar.
don.joey
6
@begueradj alias sama sekali berbeda dari tautan simbolik .
Radu Rădeanu
1
Peringatan: ini dapat memecah skrip lain yang mengharapkan Python 2.7.
kmiklas
85

[Juni 2016] Tempat yang direkomendasikan untuk informasi tentang transisi adalah halaman resmi Python Ubuntu .


Dari wiki Ubuntu :

Untuk Ubuntu dan Debian, kami memiliki sasaran proyek yang sedang berlangsung untuk menjadikan Python 3 versi Python default dan yang disukai di distro.

Apa ini tidak berarti:

  • /usr/bin/pythonakan menunjuk ke Python 3. Tidak, ini tidak akan terjadi (kecuali PEP 394 menganjurkan sebaliknya, yang diragukan untuk masa mendatang). /usr/bin/pythondan /usr/bin/python2akan mengarah ke Python 2.7 dan /usr/bin/python3akan menunjuk ke versi Python 3 terbaru yang didukung.

  • Python 2 akan dihapus dari arsip. Tidak, ini tidak akan terjadi . Kami berharap Python 2.7 tetap didukung dan tersedia di Ubuntu untuk waktu yang cukup lama, mengingat bahwa PEP 373 menjanjikan dukungan pemeliharaan bug hulu hingga tahun 2020.

Tidak disarankan untuk mengubah tautan simbolik karena dependensi paket lain, tetapi mereka "memiliki tujuan proyek yang sedang berlangsung untuk menjadikan Python 3 sebagai default, lebih disukai versi Python di distro".


Untuk penggunaan CLI, seperti @Radu Rădeanu , saya akan merekomendasikan menempatkan alias di file pengguna ~/.bashrc, .bash_aliases(file yang berbeda, termasuk ~/.bash_profile, dimuat setidaknya sekali, sebagian besar untuk tujuan organisasi, tetapi dapat bervariasi berdasarkan platform). Lingkungan virtual python juga berfungsi dengan baik.

Contoh-contoh Alias:

alias python=python3

atau

alias python='/usr/bin/python3'

Skrip harus tetap menggunakan sesuatu seperti #!/usr/bin/env python3untuk kompatibilitas silang.

Penggunaannya envbagus untuk penggunaan campuran dengan lingkungan virtual.

Catatan (terima kasih kepada @wjandrea): alias adalah bagian dari runtime bash, bukan lingkungan pengguna. Oleh karena itu, mereka tidak tersedia untuk shebang ( #!). Jika Anda lebih suka alias python = python3, maka beberapa program.pytanpa shebang dapat dieksekusi dengan memanggil juru bahasa alias seperti ini python program.py. Aliasing juga dapat berguna untuk sistem dengan beberapa versi python3 seperti 3.4 dan 3.6 bersamaan.

Kevin
sumber
1
Ini sepertinya ketinggalan zaman sekarang: mereka berencana untuk menghapus python2 di Xenial, tetapi kemudian tidak.
OrangeDog
1
@OrangeDog, terima kasih atas pembaruannya. Ya, halaman wiki yang saya kutip sekarang ditandai sebagai ketinggalan zaman, karena lebih banyak kemajuan telah dibuat dalam dua tahun terakhir untuk pindah ke hanya Python 3. Halaman baru untuk mengikuti perkembangan ini adalah halaman resmi Ubuntu Python .
Kevin
Halaman "terbaru" juga kedaluwarsa, berkenaan dengan rencana untuk Xenial.
OrangeDog
Saya tidak akan mengatakan itu "ketinggalan zaman" sebanyak "belum diperbarui baru-baru ini." Tampaknya masih menjadi lokasi saat ini untuk menyimpan posting tentang ini. Namun, dalam komentar di sini, saya akan menghargai sumber baru lain yang mungkin ditemukan oleh siapa pun. Menambahkan lebih banyak sumber ke jawaban saya, tentang mengapa tidak membuat perubahan menjadi adil python, tidak benar-benar relevan sampai konversi selesai. Bahkan kemudian, itu bisa saja menjadi masalah.
Kevin
2
Alias ​​internal ke Bash, bukan bagian dari lingkungan, jadi Anda masih perlu menggunakan python3shebang, bukan python.
wjandrea
28

Pembaruan: Ini adalah cara yang salah, saya telah belajar, karena Python2 dan Python3 tidak dapat saling dipertukarkan.

Anda dapat mencoba alat baris perintah update-alternatives.

$ sudo update-alternatives --config python

Jika Anda mendapatkan kesalahan "tidak ada alternatif untuk python" maka buat sendiri alternatif dengan perintah berikut:

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

Ubah jalur /usr/bin/python3ke versi python yang Anda inginkan sesuai.

webwurst
sumber
20
python2 dan python3 bukan alternatif. Jangan gunakan pembaruan-alternatif untuk tujuan ini.
jobin
Kenapa tidak? Bisakah salah satu dari kalian tolong jelaskan mengapa update-alternativestidak cocok untuk python? Apakah itu karena legacy.python.org/dev/peps/pep-0394 ?
Dmitry Grigoryev
11
alternatif adalah implementasi yang berbeda untuk fungsi yang sama. python2 dan python3 tidak menyediakan fungsi yang sama.
Ely
Anda dapat melakukan sesuatu seperti ini jika Anda menginstal secara manual (melalui ppa atau apa pun) versi lain dari python3. sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
David Baucum
Inilah yang perlu saya lakukan untuk vm 18.04.2 yang tidak datang dengan python. Terima kasih
Dark Star1
9

Ubuntu, dan distro Linux lainnya, masih sangat tergantung pada Python 2.7 untuk sejumlah aplikasi dan perintah. Jika Anda mengubah referensi default "python" ke Python 3.x, maka sejumlah fungsi Python akan mulai melempar kesalahan pernyataan.

Misalnya, di Ubuntu, 'pip' untuk satu tidak akan lagi berjalan dengan benar kecuali jika Anda langsung mengedit file dan mengubah shebang ke referensi '#! / Usr / bin / env python2.7'. Pada rasa RHEL (Red Hat Enterprise Linux) seperti Red Hat, Fedora dan CentOS, perintah 'Yum' juga bergantung pada Python 2.7.

Maksud saya di sini adalah bahwa Anda akan menyebabkan sejumlah besar kode untuk mulai melempar kesalahan pernyataan hanya supaya Anda bisa mengetikkan 'python' di terminal untuk referensi Python 3.x.

Anda jauh lebih baik dengan menggunakan perintah 'python3' di terminal dan shebang '#! / Usr / bin / env python3' di file Python 3.x Anda.

Linglung
sumber
2

Melakukan

cd ~
gedit .bash_aliases

lalu tulis juga

alias python=python3

atau

alias python='/usr/bin/python3'

Simpan file, tutup terminal dan buka lagi.
Tautan

Breeze
sumber
1

Anda dapat terhubung /usr/bin/pythonke python3dengan

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

dan Anda dapat mencegah Python 2 dan pip2 diinstal sebagai ketergantungan dengan

sudo apt-mark hold python python-pip

Lihat jawaban lain untuk alasan Anda mungkin tidak ingin melakukan ini. Ubuntu 18.04+ tidak lagi hadir dengan Python 2, jadi seharusnya tidak terlalu buruk.

Boris
sumber
2
Mengenai "Ubuntu 18.04 tidak lagi hadir dengan Python 2, jadi seharusnya tidak terlalu buruk." , pada Ubuntu (bahkan versi yang tidak memiliki Python 2 diinstal secara default), sebuah executable dipanggil pythondiasumsikan Python 2, jadi ini dapat merusak beberapa hal.
wjandrea
* python->/usr/bin/python
wjandrea
0
cat > /usr/local/bin/py
#!/bin/dash
python3 "$@"
<CTRL-D>

(asalkan Anda memiliki izin menulis ke / usr / local / bin) juga

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

maka Anda hanya mengetik py (dan menggunakan py di baris #!) untuk python yang Anda pilih.

John Allsup
sumber
Bukankah lebih mudah menggunakan symlink? sudo ln -s /usr/bin/python3 /usr/local/bin/py
wjandrea
0

Saya merasa sangat membantu untuk menghapus / usr / bin / python dan / usr / bin / pip. Ini memaksa semua program untuk bergantung pada perintah "python2" dan "python3".

Meskipun beberapa paket opsional dan ketinggalan jaman bergantung pada #!/usr/bin/pythonuntuk bekerja, saya lebih suka mengirimkan tambalan ke program-program itu daripada terus membuat kesalahan aneh dan kadang-kadang sulit untuk debug.

Erik Aronesty
sumber
-1

Anda dapat menggunakan update-alternativesuntuk menyediakan berbagai versi program yang mungkin diperlukan pada waktu yang berbeda karena masalah kompatibilitas.

Jawaban ini adalah contoh yang baik untuk bagaimana mengatur semuanya agar secara bersamaan mempertahankan berbagai versi gcc / g ++, misalnya.

lakukan saja hal yang sama dengan python2.7 dan python 3.3

dcanelha
sumber
2
Pengguna pemula mungkin tidak dapat dengan mudah mengadaptasi jawaban tertaut ke situasi yang berbeda. Selain mengkredit jawaban sebelumnya, akan lebih baik untuk menjelaskan langkah-langkah yang diperlukan untuk Python.
chaskes
Di sini saya menemukan solusi langkah demi langkah yang baik linuxconfig.org/…
woto
Python 2 dan 3 bukanlah alternatif - bahkan versi minor yang berbeda pun tidak ( mis .). Metode ini dapat dengan mudah merusak barang-barang.
wjandrea
Ini juga duplikat dari jawaban ini
wjandrea