Linux üzerinde python'un iki versiyonu. 2.7 nasıl varsayılan yapılır


124

Linux kutumda iki python sürümü var:

$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

2.7'yi nasıl varsayılan sürüm yapabilirim ki yazdığımda pythonbeni 2.7'ye koyar?


1
Bunu fedora'ma yaptığımda, yum ya da apt-get artık işe yaramadı.
Kullanıcı

@User: Evet, benzer şekilde eski bir Mandrake'i kırdım /usr/bin/env python(2.3 yerine 2.6 anlamına gelmek, komutların yarısı rpmve tamamen urpmiçalışmayı durdurdu).
abarnert

Django'yu Centos 5'e kurmak için aşağıdaki adımı takip ettim: 1st, Python 3.6'yı kaynak kodundan kurun. 2'nci: kabukta aşağıdaki komutu yazın "alias python = / usr / local / bin / python3.6" 3: Django "pip3 install Django" 4: "python -m django --version" yüklemek için aşağıdaki komutu çalıştırın Django "1.10.5" sürümüyle yüklendi
showmyroutes

benim için /usr/bin/pythonişaret eden yumuşak bir bağlantıydı python2. Şimdipython3.6
munish

Yanıtlar:


173

Muhtemelen varsayılan Python'unuzu değiştirmek istemezsiniz.

Dağıtımınız standart bir Python sistemi kurdu /usr/binve buna bağlı olan ve tarafından seçilen komut dosyalarına sahip olabilir #! /usr/bin/env python. Sen olabilir genellikle 2.7'de Python 2.6 komut dosyalarını çalıştıran paçayı, ama bunu riske atmak istiyorsun?

Üstelik, uğraşmak /usr/bin, paket yöneticinizin paketleri yönetme yeteneğini kırabilir. Ve içindeki dizinlerin sırasını değiştirmek, PATHPython dışında pek çok şeyi etkileyecektir. (Aslında, /usr/local/binönünde olması daha yaygındır /usr/binve aslında istediğiniz şey olabilir - ancak tam tersine sahipseniz, muhtemelen bunun için iyi bir neden vardır.)

Ancak, yazarken sistemin 2.7'yi çalıştırması için varsayılan Python'unuzu değiştirmenize gerek yoktur python.


İlk olarak, bir kabuk takma adı ayarlayabilirsiniz:

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

Bir istem de o yazın ya da koyun ~/.bashrcdeğişikliğin kalıcı olmasını istiyorsanız, ve ne zaman artık sen yazın pythono senin 2.7 seçilen çalışır, ancak sistem denemeden bazı program, bir komut dosyası çalıştırmak için zaman ile /usr/bin/env pythonstandart 2.6 çalışır.


Alternatif olarak, 2.7'nizden sanal bir ortam oluşturun (veya farklı projeler için ayrı venvler) ve işinizi venv içinde yapın.


1
:( haklısın. maalesef @ rohit'in cevabına göre zaten yeni bir symb bağlantısı oluşturmuştum. Şimdi komutum yumçalışmıyor! sym bağlantısını geri oluşturmayı denedim ama sudo ln -sf /usr/bin/python2.6 /usr/bin/pythonherhangi bir geçici çözüm işe yaramıyor mu?
Anthony

@Anthony: Tahminime göre bu /usr/bin/pythondaha önce bir sembolik bağlantı değildi, bir sarmalayıcı komut dosyası veya çalıştırılabilirdi ve şimdi üzerine yazdınız ve geri alamıyorsunuz. Eğer rpmhala çalışıyor, el Python paketini indirip olmadan yükleyebilirsiniz yum.
abarnert

Yazdığımda hala 2.6 tercümana ulaşabiliyorum, python2.6böylece hala orada.
Anthony

7
@Anthony: Ve gelecekte, birisi size / usr / bin içindeki (veya / usr / local dışında / usr içindeki herhangi bir yeri) değiştirmenizi söylerse, orada ne olduğunu not edin ve bir yedek…
abarnert

Ne kötü bir karmaşa yaşadım! Bu senaryoya sahip olabilecek başka bir centos kutum var. Oradan kopyalayıp bu kutunun / usr / bin içine koyarsam. sence işe yarayacak mı?
Anthony

19

Ekle /usr/local/binsizin için PATHdaha erken listede, ortam değişkeni /usr/bin.

Genellikle bu, kabuğunuzun rc dosyasında yapılır, örn. Bash için, şunu koyarsınız .bashrc:

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

Bu, kabuğunuzun içeri girmeden önce bir pythongiriş aramasına neden olur ./usr/local/bin/usr/bin

(Elbette, bu aynı zamanda /usr/local/bin/pythonişaret etmeniz gerektiği anlamına gelir python2.7- eğer zaten yoksa, sembolik bağlantı yapmanız gerekir.)


Bir şey tarafından ayarlanmışsa, PYTHONHOME'u uygun şekilde ayarlamak / ayarını kaldırmak gerekebilir.
Marcin

1
Bu, / usr / bin'in kendisini değiştirmeyi öneren çözümler kadar tehlikeli değil… ama yine de OP'nin aslında istediği şeyin bu olmadığını düşünüyorum.
abarnert

Bu, Ubuntu 14.x'ten 16.x'e yükselttikten sonra bana yardımcı oldu
learn2day

4

Komutu girin

which python

//output:
/usr/bin/python

cd /usr/bin
ls -l

Burada bunun gibi bir şey görebilirsiniz

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

varsayılan python2.7'niz yumuşak olarak 'python' metnine bağlıdır

Bu yüzden softlink python'u kaldırın

sudo rm -r python

sonra yukarıdaki komutu yeniden deneyin

ls -l

yumuşak bağlantının kaldırıldığını görebilirsiniz

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

Ardından python3.6 için yeni bir softlink oluşturun

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

Ardından komutu pythonterminalde deneyin

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

Tür help, copyright, creditsveya licensedaha fazla bilgi için.


1
Gönderiniz, OP'nin sorusuna bir cevap değil.
Frank

Bu benim için çok garip bir sorunu çözdü. Python sürümünü root veya normal terminalden kontrol ettiğimde 3.6.8 gösteriyordu ama bir .sh oluşturup içinde python -version yazarsam 2.7 çıktı. Yukarıda belirtildiği gibi bir softlink mevcut olduğu için ortaya çıktı. Adımları takip ettim ve düzeltildi. Teşekkürler.
S4nd33p

Teşekkür ederim! Bu bana "gerekli python 3 veya sonrası" sorununu çözdü
Tamim Attafi

4

Geçerli python sürümünü şu şekilde doğrulayın:

$ python --version

sonra python'un hangi dosyaya sembolik bağlantı olduğunu kontrol edin.

  $ ll /usr/bin/python

Çıkış Ör:

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

Diğer python sürümlerini kontrol edin:

$ ls /usr/bin/python*

Çıkış Ör:

/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

Mevcut python sürümünü 3.6 sürüm düzenleme dosyası ~ / .bashrc olarak değiştirmek istiyorsanız:

vim ~/.bashrc

dosyanın sonuna aşağıdaki satırı ekleyin ve kaydedin:

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

Python 3.6 için pip yüklemek için

$ 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

Başarı durumunda, pip'in mevcut sürümünü kontrol edin:

$ pip3 -V

Çıkış Ör:

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

2

Tüm işletim sistemleri varsayılan bir python sürümüyle gelir ve / usr / bin içinde bulunur. İşletim sistemi ile gelen tüm komut dosyaları (örn. Yum), / usr / bin içinde bulunan python'un bu sürümünü işaret eder. Yeni bir python sürümü yüklemek istediğinizde, python'un yeni sürümüyle çalışmayabilecek mevcut komut dosyalarını kırmak istemezsiniz.

Bunu yapmanın doğru yolu, python'u alternatif bir sürüm olarak kurmaktır.

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

Şimdi bunu yaparak yum gibi mevcut betikler / usr / bin / python ile çalışmaya devam ediyor. ve varsayılan python sürümünüz / usr / local / bin içine kurulu olan sürüm olacaktır. ör. python yazdığınızda 2.7.3 elde edersiniz

Bunun nedeni. $ PATH değişkeni usr / bin'den önce / usr / local / bin'e sahiptir.

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

Python2.7, varsayılan python sürümü olarak hala etkili olmuyorsa, yapmanız gereken

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

-8

Sanırım 2.7 sürümünü manuel olarak yüklediniz, 2.6 paketten mi geliyor?

Basit cevap: python paketini kaldırın.

Daha karmaşık olanı: / usr / local içine manuel olarak kurmayın. 2.7 sürümüyle bir paket oluşturun ve ardından yükseltin.

Paket işleme, kullandığınız dağıtıma bağlıdır.


5
Python paketi dağıtım için neredeyse kesinlikle gereklidir. CentOS RPM tabanlıdır ve RPM ve YUM araçlarının yarısı Python'da yazılmıştır.
abarnert

Sevgili Michael, Lütfen manuel olarak yüklenen python2.7'yi kaldırma seçeneğini önerin!
AVA

Basit çözüm, / usr / local / altındaki her şeyi kaldırmak olacaktır, ancak bu şekilde manuel olarak derleyip kurduğunuz her şeyi kaldırırsınız. Hangi dosyaların / usr / local içindeki hangi yazılıma ait olduğunu bulmanın iyi bir yolu yoktur ve bu nedenle herhangi bir şeyi yüklemek genellikle tavsiye edilmez. Belki orada sadece pitonunuz vardır. / Usr / local / bin yalnızca python çalıştırılabilir dosyaları içeriyorsa, kaldırma işleminin başka hiçbir şeyi bozmaması için iyi bir şansınız vardır.
emesik

2
Python'u asla kaldırmamalısınız. Bunu benden al. Ben yaptım ve sistemimi bozdu. Pek çok uygulama buna bağlıdır. Bu çok yanlıştır.
Patrick Mutwiri
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.