Birden fazla python sürümünü yönetmenin doğru yolu nedir?


21

Varsayılan Python olarak Python 2.6 yüklü bir makinem var. Sonra, Python 2.7'yi yükledim ve / usr / bin / python'u yeni yüklemeye bir sembolik bağlantı olarak manuel olarak oluşturdum.

Sonra, komut bulunamadı ile ilgili sorunlar yaşıyordu . Yeniden yüklemeye çalışıyorum:

sudo apt-get remove command-not-found

ve bu hatayı alıyorum:

/usr/bin/python does not match the
python default version. It must be
reset to point to python2.6

Ama gerçekten Python 2.7'nin varsayılan olmasını istiyorum. Bu karışıklığı nasıl düzeltirim?

Yanıtlar:


16

Bir işletim sisteminde varsayılan Python'u (veya Perl, vb.) Değiştirmek gerçekten kötü bir fikirdir. Bu yorumlayıcı aslında işletim sisteminin bir parçasıdır ve yorumlayıcının bu sürümüyle çalışmak için özel olarak yazılmış başka işletim sistemi bileşenleri de olabilir.

Örneğin Redhat üzerinde sistem yazılımı güncellemelerini yapan yum aracı bir python uygulamasıdır. Bunu gerçekten kırmak istemiyorsun. Bu tür uygulamalar, yüklediğiniz sürümde bulunmayan belirli, belki de standart olmayan python modüllerine bağlı olabilir. Örneğin Ubuntu'da Python'da yazılmış yerleşik işletim sistemi araçlarından bazılarının Python standart kütüphanesinin parçası olmayan Storm adlı bir ORM kullandığını düşünüyorum. Temiz Python 2.7 kurulumunuzda, Storm modülünün beklenen özel sürümü kurulu mu? Storm'un herhangi bir sürümü var mı? Hayır? O zaman işletim sisteminizin bir yığınını kırdınız.

Bunu yapmanın doğru yolu, tercih ettiğiniz python sürümünü yüklemek ve .bash_profile, yolunuzu ve benzerlerini ayarlayarak kullanıcı hesabınızı kullanacak şekilde ayarlamaktır. Ayrıca Python için virtualenv modülüne de bakmak isteyebilirsiniz.


1
Burada yolumu buldum. Bu yığın üzerinde temsilcisi olsaydı -1 olur. Neden? Çünkü önerilen yaklaşım sadece "tercih ettiğiniz python sürümünü yükleyin" der. Bu sistem pythonuna dokunmadan nasıl yapılır?
jez

@jez Kullanıcılar uygulamaları ve işletim sistemi seçim kombinasyonları için kurulum talimatlarına başvurmalıdır. Genel olarak, dil yükleyici paketleri temel işletim sistemi bileşenlerinin üzerine yazılmayacak şekilde iyi huylu bir konuma yüklenir, bu nedenle işletim sistemi sürümünün üzerine yazılması özel durum olacaktır.
Simon Hibbs

8

Bu karışıklığı nasıl düzeltirim?

Yeniden yüklemekten başka bir şey yok python. Değişikliğinizi geri alacak (simge bağlantısı).

Neden varsayılan olarak istiyorsun? İhtiyacınız olan her seferinde (çalıştırılabilir) komut dosyalarınızın başına (shebang) kullanın python2.7veya ekleyin #!/usr/bin/python2.7.

python2.7Sistem çapında varsayılan olarak ısrar ediyorsanız , Ubuntu'nun daha yeni bir sürümünü kullanın (şu anda Ubuntu 11.04, Natty kodludur). Bu sürümü varsayılan olarak kullanır.

Gelecekte, sembolik bağlantıyla yaptığınız gibi manuel müdahaleler yapmaktan kaçının. Bu, özellikle dağıtım yönetilen dosyalar ve özellikle Python kurulumları gibi karmaşık hayvanlar için geçerlidir.


Yükselttikten sonra varsayılan python kurulumunu değiştirmenin makul olduğunu düşündüm. Varsayılan olarak istiyorum çünkü yeni python ile çalışmak istiyorum ... varsayılan olarak. Ben pythonbash yazdığımda, yeni python almak istiyorum. Bunu yapmamdan daha iyi bir yol var mı?
20:11

Sadece not etmek için - python 2.7'yi yükleme şeklimde yanlış bir şey olduğunu sanmıyorum. Tek "alışılmamış" hamle varsayılan olarak ayarlamak için uygun bir yol olduğunu düşündüm symlink değiştiriyordu . Daha iyi bir yol var mı?
20:11

2
@ripper: Sanırım bu konuya biraz geç geliyorum. Tshepang'ın dediği gibi Ubuntu'daki pythonpaket sistem sürümünü belirler. Şimdi, kendi python paketinizi vb. Oluşturarak kurulumunuzu python 2.7'nin varsayılan olması için özelleştirebilirsiniz, ancak eğer öyleyse, Ubuntu yerine Python kurulumunuzun etkinliğini koruyacaksınız ve Python'un Debian / Ubuntu'da yönetilmektedir. Sistemdeki diğer Python paketlerinin varsayılan olarak 2.6 ile çalışacak şekilde yapılandırıldığını unutmayın, bu nedenle başka herhangi bir şey dışında kırılma meydana gelebilir.
Faheem Mitha

1
@Tshepang: İyi özet!
Faheem Mitha

12
@ ripper234: Hiçbir şeyi değiştirmeyin /usr/bin, bu dağıtımınız için ayrılmıştır. Bunun yerine, /usr/local/bin/pythonsimgesel bir bağlantı oluşturun python2.7. Sonra komut satırını #!/usr/bin/env pythonyazmanın yanı sıra (önerilen deyim) kullanarak komut dosyaları pythonPython 2.7 çalıştıracaktır. Dağıtımdan Python dağıtımını isteyen komut dosyaları aramaya devam edebilirsiniz #!/usr/bin/python.
Gilles 'SO- kötü olmayı kes

2

Yasal Uyarı: ben sadece aynı cevabı taşma yığını gönderdi:

/programming/2812520/pip-dealing-with-multiple-python-versions/50319252

İşte benim sorunum. Python için çalışır 3. Ana özellikleri:

  • Her Python sürümü kaynaktan derlenmiştir
  • Tüm sürümler yerel olarak yüklenir
  • Sisteminizin varsayılan Python kurulumunu hiçbir şekilde değiştirmez
  • Her Python sürümü virtualenv ile izole edilmiştir

Adımlar aşağıdaki gibidir:

  1. Başka bir şekilde yüklenmiş birkaç ekstra python sürümünüz varsa, bunlardan kurtulun, örneğin, $ HOME / .local / lib / python3.x , vb. (Ayrıca global olarak kurulu olanları da kaldırın ). Yine de sisteminizin varsayılan python3 sürümüne dokunmayın.

  2. Aşağıdaki dizin yapısında farklı python sürümleri için kaynak indirin:

    $HOME/
        python_versions/ : download Python-*.tgz packages here and "tar xvf" them.  You'll get directories like this:
          Python-3.4.8/
          Python-3.6.5/
          Python-3.x.y/
          ...
  3. Her At "Python 3.xy /" dizini aşağıdakileri yapın (do DEĞİL aşamaların herhangi birinde "sudo" kullanın!):

    mkdir root
    ./configure --prefix=$PWD/root 
    make -j 2
    make install
    virtualenv --no-site-packages -p root/bin/python3.x env
  4. "Python_versions /" dizininde şöyle dosya oluşturun:

    env_python3x.bash:
    
    #!/bin/bash
    echo "type deactivate to exit"
    source $HOME/python_versions/Python-3.x.y/env/bin/activate
  5. Şimdi, python3.x'i seçmek istediğinizde,

    source $HOME/python_versions/env_python3x.bash

    virtualenv'e girmek için

  6. Virtualenv'deyken, en sevdiğiniz python paketlerini

    pip install --upgrade package_name
  7. Virtualenv ve python sürümünden çıkmak için "deactivate" yazmanız yeterlidir.


0

Mac ve Ubuntu'ya çok sayıda python dağıtımı koyduk ve işte benim tavsiyem.

  1. Sistem python'unu işaretsiz bırakın: asla kullanmayın.

  2. Yalnızca bir birincil piton dağıtım, indirme gerektiren ve yüklerseniz Canopy enthought dan. Yüklendiğinde, "sistem python'um olarak ayarla" yı seçin ve ardından paketleri Canopy'nin GUI paket yöneticisinden yükleyebilirsiniz.

    • Canopy, pippaketleri kurmanıza izin veren PyPi paket yöneticisi komutuyla da kutudan çıkartılabilir (örn. pip install python-twitter)
  3. Sanal ortamlar kullanmayı planlıyorsanız (yani, python programları geliştiriyor ve her biri için özel bir temiz python ortamı istiyorsanız, aralarında geçiş yapmak için kolay bir yöntemle), sanal ortam yöneticisi aracı nedeniyle Anaopyda'yı Canopy'yi öneriyorum . Bu sana izin verecek

0

pyenv

https://github.com/pyenv/pyenv

Pyenv, Node.js NVM ve Ruby RVM gibi tek bir kullanıcı için sudo olmadan birden fazla Python sürümünü yönetmenizi sağlar .

Pyenv'i yükleyin:

curl https://pyenv.run | bash

Ardından aşağıdakilere ekleyin .bashrc:

export PATH="${HOME}/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

Yüklemek için Python sürümünü bulun:

pyenv install --list

İstediğiniz python sürümünü yükleyin:

# Increase the chances that the build will have all dependencies.
# https://github.com/pyenv/pyenv/wiki/Common-build-problems
sudo apt build-dep python3
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
  libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
  xz-utils tk-dev libffi-dev liblzma-dev python-openssl git

# Build and install a Python version from source.
pyenv install 3.8.0

Kullanılabilir Python sürümlerini listeleyin:

pyenv versions

Şimdi var:

* system (set by /home/cirsan01/.pyenv/version)
  3.8.0

Farklı bir python sürümü seçin:

pyenv global 3.8.0
python --version
python3 --version

Her iki çıktı:

Python 3.8.0

Artık paketleri normal şekilde kurmaya ve kullanmaya devam edebiliriz:

pip install cowsay
python -c 'import cowsay; cowsay.tux("Python is fun")'
cowsay 'hello'

Her şeyin temiz çevremize yerel olarak kurulduğunu doğrulayabiliriz:

python -c 'import cowsay; print(cowsay.__file__)'
which cowsay

Proje kullanımı başına

Önceki bölümde, global kurulumda pyenv'in nasıl kullanıldığını gördük.

Ancak, genellikle istediğiniz her proje için belirli bir python ve paket sürümü ayarlamaktır. Böyle yapılır.

İlk önce istediğiniz Python sürümünü kurun.

Ardından, proje dizininizin içinden istediğiniz python sürümünü şu şekilde ayarlayın:

pyenv local 3.8.0

.python-versionsürüm dizesini içeren bir dosya oluşturur .

Ve şimdi sadece projemiz için yerel olarak bir paket kuralım: TODO: Görünüşün güzel bir yolu yok: /programming/30407446/pyenv-choose-virtualenv-directory/59267972#59267972

Birisi projenizi kullanmak istediğinde şunları yapacak:

pyenv local

Python sürümünü doğru olana ayarlar.

İlgili konular:

Ubuntu 18.04, pyenv 1.2.15 üzerinde test edilmiştir.

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.