“Python3 kurulumunuz bozuk”


13

Ubuntu 16.04.5 LTS'den 18.04'e yükseltmek istiyorum, bu yüzden koştum sudo do-release-upgrade. İndirme ve çıkartma işleminden sonra bionic.tar.gz:

Can not upgrade 

Your python3 install is corrupted. Please fix the '/usr/bin/python3'
symlink.

Gördüm "piton yükleme bozulmuş" Nasıl düzeltilir?? ve sudo ln -sf /usr/bin/python3.6 /usr/bin/python3benzer bir sorun olacağını düşündüm. Ama bu işe yaramadı (hala aynı hata mesajı).

Birkaç python sürümüm var:

$ ls /usr/lib | grep python
python2.7
python3
python3.5
python3.6

$ update-alternatives --display python3
python3 - auto mode
  link best version is /usr/bin/python3.6
  link currently points to /usr/bin/python3.6
  link python3 is /usr/bin/python3
/usr/bin/python3.5 - priority 1
/usr/bin/python3.6 - priority 2

Nasıl düzeltebilirim python3?


1
Peki ya yeniden kurulum (kabul edilen cevapta belirtildiği gibi)?
Kulfy

Yanıtlar:


16

16.04 için varsayılan Python 3 sürümünü kullanmanız gerekir. Budur 3.5 değil, 3.6. Öyleyse çalıştırın:

sudo ln -sf /usr/bin/python3.5 /usr/bin/python3

Bu işe yaramazsa, python3paketi yeniden yüklemeyi deneyin .

sudo apt-get install --reinstall python3

Bu arada, update-alternatives --display python3sana vermelisin update-alternatives: error: no alternatives for python3. Python'un farklı sürümleri Ubuntu'da alternatif değildir.


Ne yazık ki, çalışmıyor. kempelen.dai.fmph.uniba.sk/python_headache.png Sistem güncel ve yine aynı python ve python3 paketlerini yeniden kurdum. Bu makineye özgüdür, diğer benzer makine ince yükseltilmiştir.
Palo

@palo Daha önce bahsettiğim yeniden yükleme komutunun aslında her şeyi yeniden yüklemeyebileceğini düşünüyorum. Deneyin sudo apt-get install --reinstall python3 python3-minimal python3.5 python3.5-minimal.
wjandrea

hızlı bir yanıt için teşekkür ederim. Önerdiğiniz gibi denedim, ancak aynı mesaj "python3 yükleme bozuk. Lütfen '/ usr / bin / python3' symlink düzeltmek" hala yolunda. Python3'ü kaldırmak, çok fazla bağımlı paketi patlattığı için bir seçenek değildir. Ne araştıracağınız hakkında bir fikriniz varsa, bunu yapacağım.
Palo

Bazı yerel klasörlerde meslektaşlarımın bu makineye yüklediği yazılımla bir ilgisi olabilir. Rpi, python3.6 içeren miniconda3 ve /usr/local/python2.7 için gömülü linux olduğunu görüyorum. Hala hangi python / usr / bin / python bildirir, ancak pip / usr / local / bin / pip'den gider. / Etc / ortamını / usr / local / ... komutunu değiştirdikten sonra bile PATH'ın sonuna, aynı mesaj. Pyversions -d raporlarını fark ettim: "/ usr / bin / python, python varsayılan sürümüyle eşleşmiyor. Python2.7'yi gösterecek şekilde sıfırlanmalıdır". Bu yüzden / usr / bin / python bağlantısını değiştireceğim ...
Palo

... / etc / alternatifler / python yerine doğrudan /usr/bin/python2.7'ye ve aniden çapraz dönüşümler -d mutluydu ve do-release-yükseltme python hakkında şikayet etmedi ve yükseltme sürecini beklendiği gibi başlatmadı! Yani sorun muhtemelen sadece python'dan python2.7'ye / etc / alternatifleri aracılığıyla bu dolaylı çift bağlantılı yoldu.
Palo

33

Pop! _OS 18.04'te 18.10'a yükseltmeye çalışırken bu problemle karşılaştım ve problemin sembolik için /usr/bin/pythondeğil , sembolik bağlantıda yattığı ortaya çıktı /usr/bin/python3. Ben (değil ) /usr/bin/python3.6için bir alternatif olarak yapılandırmıştım ve bunu değiştirdiğimde, beklediğim gibi çalışabilirdim .pythonpython3do-release-upgrade

Ben hata mesajı işaret dilek pythondeğil python3.


Önce, sorunla:

$ update-alternatives --display python
python - manual mode
  link best version is /usr/bin/python3.6
  link currently points to /usr/bin/python2.7
  link python is /usr/bin/python
/usr/bin/python2.7 - priority 1
/usr/bin/python3.6 - priority 2 

Bu şekilde sabitledim:

$ sudo update-alternatives --remove-all python
$ sudo ln -sf /usr/bin/python2.7 /usr/bin/python

Ayrıca , neler olup bittiğini ve nasıl düzeltileceğini daha iyi açıklayan daha kesin bir çözümü açıklayan aşağıdaki yoruma bakın .


1
Evet, çözümün işe yaradığını doğrulayabilirim, bu cevap kabul edilmelidir.
Sumit Jain

Bu benim için de işe yaradı
Efi Kaltirimidou

3
İçin gözle update-alternatives --remove-all pythonkesinlikle gereksiz bir overkill olduğunu: Tek yapmanız gereken tek şey kullanıyordum update-alternatives --config pythonolması pythonson gelin python2.*(örn python2.7sonra kullanın) update-alternatives --config python3sahip olmak python3için gelin özellikle python3.6 - 18.04 için varsayılan Python 3 versiyonu olan.
KiriSakow

2
Eğer Ubuntu 18.04 de piton 3.7 yükseltme gerekirse, sistemin tümündeki yapmayın - ya da pis küçük sorunlar yaşıyorsanız sonunda bağlı konum systemwideye temel araçları gibi olan gnome-terminal, update-managervb Aksine sanal ortamları (dokümantasyon kullanmak burada ve burada )
KiriSakow

1
@KiriSakow: alternatifler sisteminde geçerli bir "bağlantı grubu" update-alternatives --config python3olmadığı için çalışmaz python3.
Daniel K.

5

Ben bu hata mesajını gözlenen WSL Ubuntu çalışan Windows 10 1903 ben yükseltmek istediğinde 16.04 LTS için 18.04 LTS .

do-release-upgradeBaşarısız olduktan sonra , pythonsunulan her seçeneğe alternatifleri değiştirdim update-alternatives --config pythonve yükseltme komutunu tekrar çalıştırdım. Bu yardımcı olmadı.

Sonra /var/log/dist-upgrade/main.logsatırları içeren günlük dosyasını kontrol ettim

2019-09-02 20:58:08,686 DEBUG _pythonSymlinkCheck run
2019-09-02 20:58:08,687 DEBUG python symlink points to: '/etc/alternatives/python', but expected is 'python2.7' or
'/usr/bin/python2.7'
2019-09-02 20:58:08,688 ERROR pythonSymlinkCheck() failed, aborting

Hata mesajı python3'ten bahsetse de, sorun python2 ile ilgilidir .

Yükseltme komut dosyası, /usr/bin/pythonbağlantı için kontrol eder /usr/bin/python2, kaynak koduna bakın DistUpgrade/DistUpgradeController.py: ubuntu launchpad

Yani bir çözüm, python'u alternatif sistemden tamamen kaldırmak ve bağlantıyı en popüler cevapta açıklandığı gibi manuel olarak eklemektir.

Python'u alternatif sistemden kaldırmak istemiyorsanız, bağlantıyı yalnızca yükseltme işlemi sırasında sadece değiştirin:

# rm /usr/bin/python 
# ln -sf /usr/bin/python2.7 /usr/bin/python
# do-release-upgrade

Bu benim için çalıştı.

Yükseltme işlemi sırasında bağlantı otomatik olarak onarılır. Bu nedenle yükseltme tamamlandığında, alternatifler dizinindeki python girişine işaret eder:

$ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 24 Sep  2 22:01 /usr/bin/python -> /etc/alternatives/python

Düzenleme: ayrıntılı bilgi için, 18.04 LTS'den 19.04'e yükseltirseniz ve anwser da bu durum için geçerliyse sorun ortaya çıkabilir.


1
Not: Bu cevap ayrıca Ubuntu 18.04 LTS'den 19.04'e yükseltme için de geçerlidir. 18.04 güncellemesi başarıyla tamamlandıktan sonra kendim denedim.
Daniel K.

3

Temel olarak bu sorunun çözümü /usr/bin/python, Ubuntu sürümünüzün beklediği Python'un doğru sürümüne işaret etmekten ibarettir (örneğin, 16.04'te Python2.7 ve 18.04'te Python3.6 idi).

Sisteminizde birkaç Python sürümü yüklüyse, update-alternativesbunları yönetmek için kullanıyor olabilirsiniz . Python için varsayılan alternatifinizin, sisteminizin beklediği doğru sürüm olduğu önemli değil (3.6, Ubuntu 18.04'te), çalışmaz.

Bu değil çalışır sebebi bu, kullanıyorsa update-alternatives, /usr/bin/python3işaret /etc/alternatives/python3ve tam olarak yapma gibi aynı değil gibi görünüyor /usr/bin/python3gelin /usr/bin/python3.6.

Bu sorunun çözümü sık sık birlikte Python3 sürümlerini yönetme durağında meydana yüzden update-alternativesve yapmak /usr/bin/python3sistem beklediği Python3 doğru sürümüne noktası.


/usr/bin/python18.04 sürümünün temiz yüklemesinde mevcut değildir, ancak temiz yükleme yerine yükleme yaparsanız veya pythonpaket yüklerseniz, bu durumda 3.6 değil Python 2.7 olmalıdır. Bkz. PEP 394 .
wjandrea

Açıkçası, Python'un farklı sürümleri Ubuntu'da alternatif değildir ve yönetilmemelidir update-alternatives. Bunun nedeni, işletim sisteminin kurulmakta olan belirli bir sürüme bağlı olmasıdır.
wjandrea
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.