Dua versi python di linux. bagaimana membuat 2.7 sebagai default


124

Saya punya dua versi python di linuxbox saya:

$python
Python 2.6.6 (r266:84292, Jul 10 2013, 22:48:45) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 


$ /usr/local/bin/python2.7
Python 2.7.3 (default, Oct  8 2013, 15:53:09) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

$ which python
/usr/bin/python
$ ls -al /usr/bin/python
-rwxr-xr-x. 2 root root 4864 Jul 10 22:49 /usr/bin/python

Bagaimana saya bisa membuat 2.7 menjadi versi default sehingga ketika saya mengetiknya pythonmenempatkan saya di 2.7?


1
Ketika saya melakukan ini pada fedora saya, yum atau apt-get tidak berfungsi lagi.
Pengguna

@ Pengguna: Ya, saya merusak Mandrake kuno dengan cara yang sama (mengubah /usr/bin/env pythonmenjadi 2.6 bukannya 2.3 berarti setengah dari perintah dalam rpmdan semua urpmiberhenti bekerja).
abarnert

Saya telah mengikuti langkah berikut untuk menginstal Django di Centos 5: 1st, instal Python 3.6 dari kode sumber. 2: dalam shell ketik perintah berikut "alias python = / usr / local / bin / python3.6" ke-3: jalankan perintah berikut untuk menginstal Django "pip3 install Django" 4th: "python -m django --version" untuk memverifikasi Django dipasang dengan versi "1.10.5"
showmyroutes

bagi saya /usr/bin/pythonadalah tautan lunak yang menunjuk ke python2. Saya baru saja mengubahnya menjadipython3.6
munish

Jawaban:


173

Anda mungkin tidak benar-benar ingin mengubah Python default Anda.

Distro Anda menginstal sistem standar Python /usr/bin, dan mungkin memiliki skrip yang bergantung pada keberadaannya, dan dipilih oleh #! /usr/bin/env python. Anda biasanya bisa lolos dengan menjalankan skrip Python 2.6 di 2.7, tetapi apakah Anda ingin mengambil risiko?

Selain itu, menggunakan monyet /usr/bindapat merusak kemampuan pengelola paket Anda untuk mengelola paket. Dan mengubah urutan direktori di Anda PATHakan memengaruhi banyak hal lain selain Python. (Faktanya, itu lebih umum untuk /usr/local/bindidahulukan /usr/bin, dan mungkin itu yang sebenarnya Anda inginkan — tetapi jika Anda memilikinya sebaliknya, mungkin ada alasan bagus untuk itu.)

Tetapi Anda tidak perlu mengubah Python default Anda untuk menjalankan sistem 2.7 saat Anda mengetik python.


Pertama, Anda dapat menyiapkan alias shell:

alias python=/usr/local/bin/python2.7

Ketik itu pada prompt, atau letakkan di Anda ~/.bashrcjika Anda ingin perubahan tetap ada, dan sekarang ketika Anda mengetiknya pythonmenjalankan 2.7 pilihan Anda, tetapi ketika beberapa program di sistem Anda mencoba menjalankan skrip dengan /usr/bin/env pythonitu menjalankan standar 2.6.


Atau, buat saja lingkungan virtual dari 2.7 Anda (atau venv terpisah untuk proyek yang berbeda), dan lakukan pekerjaan Anda di dalam venv.


1
:( Anda benar. sayangnya, saya sudah membuat tautan simbolis baru sesuai jawaban @ rohit. Sekarang yumperintah saya tidak berfungsi! Saya mencoba membuat tautan sym kembali tetapi tidak berhasil sudo ln -sf /usr/bin/python2.6 /usr/bin/python?
Anthony

@Anthony: Dugaan saya adalah /usr/bin/pythonitu sebenarnya bukan symlink sebelumnya, itu adalah skrip pembungkus atau dapat dieksekusi, dan sekarang Anda telah menimpanya dan tidak bisa mendapatkannya kembali. Jika rpmmasih berfungsi, Anda dapat mengunduh paket Python secara manual dan menginstalnya tanpa yum.
abarnert

Saya masih bisa mendapatkan 2,6 juru bahasa saat saya mengetik python2.6jadi masih ada.
Anthony

7
@Anthony: Dan di masa mendatang, jika seseorang memberi tahu Anda untuk mengubah barang di / usr / bin (atau di mana saja di / usr selain / usr / local), catat apa yang ada di sana, dan
buat

betapa buruknya diriku !! Saya memiliki kotak centos lain yang mungkin memiliki skrip itu. Jika saya menyalinnya dari sana dan menaruhnya di / usr / bin kotak ini. apa menurutmu itu akan berhasil?
Anthony

19

Tambahkan /usr/local/binke PATHvariabel lingkungan Anda , di awal daftar dari /usr/bin.

Umumnya ini dilakukan di file rc shell Anda, misalnya untuk bash, Anda akan meletakkan ini di .bashrc:

export PATH="/usr/local/bin:$PATH"

Ini akan menyebabkan cangkang Anda terlihat pertama kali pythonmasuk /usr/local/bin, sebelum masuk dengan yang masuk /usr/bin.

(Tentu saja, ini berarti Anda juga harus /usr/local/bin/pythonmenunjuk ke python2.7- jika belum, Anda harus menghubungkannya.)


Mungkin perlu untuk mengatur PYTHONHOME dengan tepat / tidak disetel jika diatur oleh sesuatu.
Marcin

1
Ini hampir tidak seberbahaya solusi yang menyarankan untuk mengubah / usr / bin itu sendiri… tapi saya masih berpikir itu bukan yang sebenarnya diinginkan OP.
abarnert

Ini membantu saya setelah memutakhirkan dari Ubuntu 14.x ke 16.x
learn2day

4

Masukkan perintahnya

which python

//output:
/usr/bin/python

cd /usr/bin
ls -l

Di sini Anda bisa melihat sesuatu seperti ini

lrwxrwxrwx 1 root   root            9 Mar  7 17:04  python -> python2.7

python2.7 default Anda adalah soft link ke teks 'python'

Jadi hapus python softlink

sudo rm -r python

lalu coba lagi perintah di atas

ls -l

Anda dapat melihat softlink dihapus

-rwxr-xr-x 1 root   root      3670448 Nov 12 20:01  python2.7

Kemudian buat softlink baru untuk python3.6

ln -s /usr/bin/python3.6 python

Kemudian coba perintah pythondi terminal

//output:
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux

Ketik help, copyright, creditsatau licenseuntuk informasi lebih lanjut.


1
Posting Anda bukanlah jawaban untuk pertanyaan OP.
Frank

Ini memecahkan masalah yang sangat aneh bagi saya. Ketika saya memeriksa versi python dari root atau terminal normal, itu menunjukkan 3.6.8 tetapi jika saya membuat .sh dan ketik python -version di dalamnya, yang dicetak 2.7. Ternyata itu karena ada softlink seperti yang disebutkan di atas. Ikuti langkah-langkahnya dan itu diperbaiki. Terima kasih.
S4nd33p

Terima kasih! Ini memecahkan saya masalah "diperlukan python 3 atau lebih baru"
Tamim Attafi

4

Verifikasi versi python saat ini dengan:

$ python --version

kemudian periksa python adalah tautan simbolis ke file mana.

  $ ll /usr/bin/python

Keluaran Contoh:

 lrwxrwxrwx 1 root root 9 Jun 16  2014 /usr/bin/python -> python2.7*

Periksa versi python lain yang tersedia:

$ ls /usr/bin/python*

Keluaran Contoh:

/usr/bin/python     /usr/bin/python2.7-config  /usr/bin/python3.4         /usr/bin/python3.4m-config  /usr/bin/python3.6m         /usr/bin/python3m
/usr/bin/python2    /usr/bin/python2-config    /usr/bin/python3.4-config  /usr/bin/python3.6          /usr/bin/python3.6m-config  /usr/bin/python3m-config
/usr/bin/python2.7  /usr/bin/python3           /usr/bin/python3.4m        /usr/bin/python3.6-config   /usr/bin/python3-config     /usr/bin/python-config

Jika ingin mengubah versi python saat ini menjadi file edit versi 3.6 ~ / .bashrc:

vim ~/.bashrc

tambahkan baris di bawah ini di akhir file dan simpan:

alias python=/usr/local/bin/python3.6

Untuk menginstal pip untuk python 3.6

$ sudo apt-get install python3.6 python3.6-dev
$ sudo curl https://bootstrap.pypa.io/ez_setup.py -o - | sudo python3.6
$ sudo easy_install pip

Jika Berhasil, periksa versi pip saat ini:

$ pip3 -V

Keluaran Contoh:

pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.6)

2

Semua OS hadir dengan versi default python dan berada di / usr / bin. Semua skrip yang disertakan dengan OS (misalnya yum) menunjukkan versi python yang berada di / usr / bin. Saat Anda ingin menginstal versi baru python, Anda tidak ingin merusak skrip yang ada yang mungkin tidak berfungsi dengan versi baru python.

Cara yang benar untuk melakukan ini adalah dengan menginstal python sebagai versi alternatif.

e.g.
wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2 
tar xf Python-2.7.3.tar.bz2
cd Python-2.7.3
./configure --prefix=/usr/local/
make && make altinstall

Sekarang dengan melakukan ini, skrip yang ada seperti yum masih berfungsi dengan / usr / bin / python. dan versi python default Anda adalah yang diinstal di / usr / local / bin. yaitu saat Anda mengetik python, Anda akan mendapatkan 2.7.3

Ini terjadi karena. Variabel $ PATH memiliki / usr / local / bin sebelum usr / bin.

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

Jika python2.7 masih tidak berfungsi sebagai versi python default, Anda perlu melakukannya

export PATH="/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"

-8

Saya kira Anda telah menginstal versi 2.7 secara manual, sedangkan 2.6 berasal dari sebuah paket?

Jawaban sederhananya adalah: uninstall paket python.

Yang lebih rumit adalah: jangan instal secara manual di / usr / local. Buat paket dengan versi 2.7 dan kemudian tingkatkan.

Penanganan paket tergantung pada distribusi apa yang Anda gunakan.


5
Paket Python hampir pasti dibutuhkan oleh distro. CentOS berbasis RPM, dan setengah dari alat RPM dan YUM ditulis dengan Python.
abarnert

Dear Michael, Mohon saran opsi untuk menghapus instalasi python2.7 yang diinstal secara manual!
AVA

Solusi sederhana akan menghapus semua yang ada di / usr / local / tetapi dengan cara ini Anda menghapus semua yang telah Anda kompilasi dan instal secara manual. Tidak ada cara yang baik untuk melacak file mana yang termasuk dalam perangkat lunak apa di / usr / local dan karena alasan ini menginstal apa pun di sana biasanya tidak disarankan. Mungkin Anda hanya memiliki python di sana. Jika / usr / local / bin hanya berisi python yang dapat dieksekusi, Anda memiliki peluang bagus bahwa penghapusan tidak akan merusak apa pun.
emesik

2
Anda tidak boleh menghapus python. Ambil ini dariku. Saya melakukannya dan itu merusak sistem saya. Banyak aplikasi bergantung padanya. Ini sangat keliru.
Patrick Mutwiri
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.