Bagaimana cara mengatur versi standar Python ke 3.x pada OS X?

329

Saya menjalankan Mountain Lion dan versi standar dasar Python adalah 2.7. Saya mengunduh Python 3.3 dan ingin menetapkannya sebagai default.

Saat ini:

$ python
    version 2.7.5
$ python3.3
    version 3.3

Bagaimana cara mengaturnya sehingga setiap kali saya menjalankannya $ pythonmembuka 3.3?

Marcus
sumber
Kemungkinan duplikat tentang cara mengubah versi python default?
Dheeraj Vepakomma
Anda dapat mengelola versi python dengan pyenv.
Shin Kim

Jawaban:

580

Mengubah versi default sistem operasi yang dapat dijalankan python dapat merusak beberapa aplikasi yang bergantung pada python2.

Namun, Anda dapat alias perintah di sebagian besar shell, Karena shell default di macOS (bash di 10.14 dan di bawah; zsh di 10.15) berbagi sintaksis yang sama. Anda bisa memasukkan alias python = 'python3' di Anda ~/.profile, dan kemudian sumber ~/.profiledi Anda ~/.bash_profiledan / atau Anda ~/.zsh_profiledengan garis seperti:

[ -e ~/.profile ] && . ~/.profile

Dengan cara ini, alias Anda akan bekerja lintas shell.

Dengan ini, pythonperintah sekarang memanggil python3. Jika Anda ingin memanggil python "asli" (yang mengacu pada python2 ) sesekali, Anda dapat menggunakan command python, yang akan membuat alias tidak tersentuh, dan bekerja di semua shell.

Jika Anda meluncurkan penerjemah lebih sering (saya lakukan) , Anda selalu dapat membuat lebih banyak alias untuk ditambahkan, yaitu:

alias 2='python2'
alias 3='python3'

Kiat: Untuk skrip, alih-alih menggunakan shebang seperti:

#!/usr/bin/env python

menggunakan:

#!/usr/bin/env python3

Dengan cara ini, sistem akan menggunakan python3 untuk menjalankan executable python .

Santosh Kumar
sumber
2
Haruskah ini tidak diletakkan di ~ / .bash_profile daripada ~ / .bash_aliases?
UnsettlingTrend
4
Menempatkan alias python=python3dan kemudian berjalan pythondi terminal saya di osx el capitan tidak bekerja untuk saya. Sudah mencoba menyimpannya ~ / .bash_aliases dan ~ / .bash_profile.
Haymaker87
43
@ Haymaker87 dijalankan source ~/.bash_profilesetelah mengedit ~/.bash_profilefile.
Wei Lu
15
Anda dapat melakukan hal yang sama untuk pip:alias pip='pip3.6'
stephen
@ surfer190 yang akan menyebabkan masalah saat menjalankan dengan sudo, bukan?
Santosh Kumar
142

Anda dapat menyelesaikannya dengan tautan simbolis.

unlink /usr/local/bin/python
ln -s /usr/local/bin/python3.3 /usr/local/bin/python
Shin Kim
sumber
25
Ini adalah jawaban yang benar (alias bagus tetapi hanya dapat diakses oleh bash, yang membatasi tempat Anda dapat menelepon). Namun, saya akan menggunakan unlinkalih-alih rmmenghapus symlink (jika Anda secara tidak sengaja menambahkan garis miring pada rmAnda mungkin memiliki beberapa hasil yang buruk). Atau, Anda bisa melakukan ln -s -f ...yang seharusnya menimpa symlink saat ini.
Chad Befus
2
@ChadBefus Terima kasih atas balasan Anda. Saya setuju dengan pendapat anda. memutuskan tautan lebih aman daripada rm.
Shin Kim
3
Apakah itu memiliki konsekuensi untuk script yang mengharapkan pythonuntuk menjadi python2.7?
Anton Tarasenko
19
macOS:unlink: /usr/bin/python: Operation not permitted
MarksCode
4
@MarksCode mencoba menjalankan baris asli kedua (yaitu ln -s... dengan /local/ ).
EliadL
42

Buka file ~ / .bash_profile .

vi ~/.bash_profile

Kemudian tuliskan alias sebagai berikut:

alias python='python3'

Sekarang simpan file dan kemudian jalankan file ~ / .bash_profile .

source ~/.bash_profile

Selamat !!! Sekarang, Anda dapat menggunakan python3 dengan mengetikkan python .

python --version

Python 3.7.3

Ananta Chandra Das
sumber
Jika Anda menemukan seperti yang saya lakukan bahwa masalah yang sama berlaku untuk pip (yaitu pip --version masih 2.7.x) maka Anda harus melakukan langkah yang sama untuk pip3. vi ~ / .bash_profile, alias pip = 'pip3', sumber ~ / .bash_profile, pip --version
SnellyBigoda
Apakah saya benar-benar perlu source ~/.bash_profilesetiap kali saya membuka kembali terminal saya? Ia kembali ke python2 setelah saya menutup dan membuka terminal lagi.
Ricky Aguilar
21

Buka jenis terminal:

alias python=python3.x

Ini akan mengatur python default sebagai python3.x

Aditya
sumber
1
Ini bekerja untuk saya tetapi menggunakan "alias python = python3"
Discant
Ini untuk sementara akan menetapkan versi python untuk instance terminal itu.
Ashwin R
12

Berikut ini bekerja untuk saya

cd /usr/local/bin
mv python python.old
ln -s python3 python
Mayank Jain
sumber
10

Saya sedikit terlambat untuk permainan yang satu ini, tapi saya pikir saya harus mengirim jawaban yang diperbarui karena saya baru saja mengalami masalah ini untuk diri saya sendiri. Harap dicatat bahwa ini hanya akan berlaku untuk pengaturan berbasis Mac (Saya belum mencobanya dengan Windows atau rasa Linux).

Cara paling sederhana untuk membuatnya berfungsi adalah menginstal Python via Brew . Jika Anda belum menginstal minuman, Anda harus melakukannya terlebih dahulu. Setelah terinstal, lakukan hal berikut di terminal:

brew install python

Ini akan menginstal Python 3. Setelah diinstal, jalankan ini:

ls -l /usr/local/bin/python*

Anda akan melihat semua tautan yang dibuat oleh brew untuk pemasangan Python-nya. Akan terlihat seperti ini:

lrwxr-xr-x  1 username  admin  36 Oct  1 13:35 /usr/local/bin/python3@ -> ../Cellar/python/3.7.4_1/bin/python3
lrwxr-xr-x  1 username  admin  43 Oct  1 13:35 /usr/local/bin/python3-config@ -> ../Cellar/python/3.7.4_1/bin/python3-config
lrwxr-xr-x  1 username  admin  38 Oct  1 13:35 /usr/local/bin/python3.7@ -> ../Cellar/python/3.7.4_1/bin/python3.7
lrwxr-xr-x  1 username  admin  45 Oct  1 13:35 /usr/local/bin/python3.7-config@ -> ../Cellar/python/3.7.4_1/bin/python3.7-config
lrwxr-xr-x  1 username  admin  39 Oct  1 13:35 /usr/local/bin/python3.7m@ -> ../Cellar/python/3.7.4_1/bin/python3.7m
lrwxr-xr-x  1 username  admin  46 Oct  1 13:35 /usr/local/bin/python3.7m-config@ -> ../Cellar/python/3.7.4_1/bin/python3.7m-config

Baris pertama dalam contoh ini menunjukkan python3symlink. Untuk mengaturnya sebagai pythonsymlink default, jalankan yang berikut ini:

ln -s -f /usr/local/bin/python3 /usr/local/bin/python

Setelah diatur, Anda dapat melakukan:

which python

dan itu harus menunjukkan:

/usr/local/bin/python

Anda harus memuat ulang shell terminal Anda saat ini agar dapat menggunakan symlink baru di shell itu, namun, semua sesi shell yang baru dibuka akan (harus) menggunakannya secara otomatis. Untuk mengujinya, buka terminal shell baru dan jalankan yang berikut:

python --version
sknight
sumber
Bekerja dengan sangat baik ( Referensi )
Nepo Znat
9

Pergi ke 'Aplikasi', masukkan folder 'Python', harus ada skrip bash yang disebut 'Update Shell Profile.command' atau serupa. Jalankan skrip itu dan harus melakukannya.

Pembaruan: Sepertinya Anda tidak harus memperbaruinya: bagaimana cara mengubah versi python default?

CT Zhu
sumber
8

Ini berhasil untuk saya. Saya menambahkan alias dan memulai ulang terminal saya :

alias python=/usr/local/bin/python3
toadead
sumber
6

Saya percaya sebagian besar orang yang mendarat di sini menggunakan ZSH thorugh iterm atau apa pun, dan itu membawa Anda ke jawaban ini .

Anda harus menambahkan / memodifikasi perintah Anda ~/.zshrcsebagai gantinya.

Tuan Crowley
sumber
3

Saya tidak yakin apakah ini tersedia di OS X, tetapi di linux saya akan menggunakan moduleperintah. Lihat di sini .

Atur modulefile dengan benar, lalu tambahkan sesuatu seperti ini ke file rc Anda (mis. ~ / .Bashrc):

module load python3.3

Ini akan membuatnya sehingga jalur Anda bisa diputar seperti yang diperlukan saat Anda masuk tanpa memengaruhi default sistem apa pun.

Vortisitas
sumber
3

Saya pikir ketika Anda menginstal python menempatkan pernyataan jalur ekspor ke file ~ / .bash_profile Anda. Jadi jika Anda tidak ingin menggunakan Python 2 lagi, Anda bisa menghapus pernyataan itu dari sana. Alias ​​seperti yang disebutkan di atas juga merupakan cara yang bagus untuk melakukannya.

Berikut adalah cara menghapus referensi dari ~ / .bash_profile - vim ./.bash_profile - hapus referensi (AKA seperti: export PATH = "/ Pengguna / bla / anaconda: $ PATH") - save dan keluar - sumber ./ .bash_profile untuk menyimpan perubahan

doubleOK
sumber
Itu tidak terjadi
co2f2e
3
$ sudo ln -s -f $(which python3) $(which python)

selesai

Oori
sumber
1

Jika Anda menggunakan virtualenvwrapper, Anda dapat menemukannya menggunakan which virtualenvwrapper.sh, lalu membukanya menggunakan vimatau editor lain lalu ubah yang berikut

# Locate the global Python where virtualenvwrapper is installed.
if [ "${VIRTUALENVWRAPPER_PYTHON:-}" = "" ]
then
    VIRTUALENVWRAPPER_PYTHON="$(command \which python)"
fi

Ubah baris VIRTUALENVWRAPPER_PYTHON="$(command \which python)"ke VIRTUALENVWRAPPER_PYTHON="$(command \which python3)".

Esir Kings
sumber
1

Bagi saya solusinya menggunakan PyCharm dan pengaturan versi python default ke yang saya harus bekerja dengan.

instal PyCharm dan buka file ==> preferensi untuk proyek baru, lalu pilih juru bahasa yang Anda inginkan untuk proyek Anda, dalam hal ini python 3.3

Chama
sumber
1

Jika Anda menggunakan macports, Anda tidak perlu bermain dengan alias atau variabel lingkungan, cukup gunakan metode yang ditawarkan macports, dijelaskan oleh T&J ini:

Cara: Macports pilih python

TL; DR:

sudo port select --set python python27
alwaring
sumber
1

Jika Anda menggunakan macport, itu memiliki cara yang lebih mudah untuk dilakukan:

Lari:

port install python37

setelah menginstal, atur default:

sudo port select --set python python37

sudo port select --set python3 python37

restart jendela cmd Anda, selesai.

Clark Jadi
sumber
1

Ya sudah agak tua. Namun masih layak mendapat jawaban yang bagus.

Dan yang bagus adalah Anda Jangan Ingin Menyentuh Default Python Pada Mac.

Instal versi Python yang Anda butuhkan melalui Homebrew atau apa pun dan gunakan dalam virtualenv. Virtualenv sering dianggap sebagai sesuatu yang seperti omong kosong, tetapi masih jauh lebih baik daripada mengubah versi python sistem-lebar (macOS cenderung melindungi diri dari tindakan seperti itu) atau pengguna-lebar, bash-lebar ... apa pun. Lupakan saja tentang Python default. Menggunakan taman bermain seperti venv adalah OS yang paling Anda sukai, sangat berterima kasih.

Kasusnya adalah, misalnya, banyak distribusi Linux modern menyingkirkan Python2 yang terinstal di luar kotak, hanya menyisakan Python3 dalam sistem. Tetapi setiap kali Anda mencoba untuk menginstal sesuatu yang lama dengan python2 sebagai ketergantungan ... harap Anda mengerti apa yang saya maksud. Pengembang yang baik tidak peduli. Pengembang yang baik membuat taman bermain yang bersih dengan versi python yang mereka inginkan.

Tor_Gash
sumber
0

Pengguna Mac hanya perlu menjalankan kode berikut di terminal

brew switch python 3.x.x

3.xx harus menjadi versi python baru.

Ini akan memperbarui semua tautan sistem.

Dilshan
sumber
0

Saran untuk alias python ke python3 akan menyebabkan masalah dengan lingkungan virtual yang mengatur versi python (misalnya: pyenv). Dengan pyenv, Anda dapat mengatur versi secara global seperti:

pyenv global 3.8.2

dan kemudian dalam proyek tertentu, Anda dapat membuat file versi .python yang memiliki versi python di dalamnya:

pyenv local 2.7.1

Ini adalah cara terbaik untuk mengelola beberapa versi python pada suatu sistem menurut saya.

Jacobs
sumber