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?
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
python
harus dijaga sebagai maknapython2
. Maksud saya komentar saya sebagai cara untuk memiliki aplikasi versi Python khusus daripada mencoba untuk bekerja di sekitar sistem Python.Jawaban:
Cara aman sederhana adalah dengan menggunakan alias. Tempatkan ini ke dalam
~/.bashrc
atau~/.bash_aliases
file:Setelah menambahkan di atas dalam file, jalankan
source ~/.bashrc
atausource ~/.bash_aliases
.Sebagai contoh:
Untuk menghindari alias gunakan
command
perintah bawaan:Cara lain untuk menghindari alias adalah menggunakan
\
sebelum perintah.Untuk menonaktifkan alias di shell saat ini, gunakan
unalias
perintah bawaan:sumber
[Juni 2016] Tempat yang direkomendasikan untuk informasi tentang transisi adalah halaman resmi Python Ubuntu .
Dari wiki Ubuntu :
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:
atau
Skrip harus tetap menggunakan sesuatu seperti
#!/usr/bin/env python3
untuk kompatibilitas silang.Penggunaannya
env
bagus 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 beberapaprogram.py
tanpa shebang dapat dieksekusi dengan memanggil juru bahasa alias seperti inipython program.py
. Aliasing juga dapat berguna untuk sistem dengan beberapa versi python3 seperti 3.4 dan 3.6 bersamaan.sumber
python
, tidak benar-benar relevan sampai konversi selesai. Bahkan kemudian, itu bisa saja menjadi masalah.python3
shebang, bukanpython
.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
.Jika Anda mendapatkan kesalahan "tidak ada alternatif untuk python" maka buat sendiri alternatif dengan perintah berikut:
Ubah jalur
/usr/bin/python3
ke versi python yang Anda inginkan sesuai.sumber
update-alternatives
tidak cocok untuk python? Apakah itu karena legacy.python.org/dev/peps/pep-0394 ?sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
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.
sumber
Melakukan
lalu tulis juga
atau
Simpan file, tutup terminal dan buka lagi.
Tautan
sumber
Anda dapat terhubung
/usr/bin/python
kepython3
dengandan Anda dapat mencegah Python 2 dan pip2 diinstal sebagai ketergantungan dengan
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.
sumber
python
diasumsikan Python 2, jadi ini dapat merusak beberapa hal.python
->/usr/bin/python
(asalkan Anda memiliki izin menulis ke / usr / local / bin) juga
maka Anda hanya mengetik py (dan menggunakan py di baris #!) untuk python yang Anda pilih.
sumber
sudo ln -s /usr/bin/python3 /usr/local/bin/py
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/python
untuk bekerja, saya lebih suka mengirimkan tambalan ke program-program itu daripada terus membuat kesalahan aneh dan kadang-kadang sulit untuk debug.sumber
Anda dapat menggunakan
update-alternatives
untuk 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
sumber