Widzę, jak wszyscy mówią, jak to naprawić za pomocą dziwnego kopiowania itp., Ale nikt tak naprawdę nie powiedział, dlaczego problem występuje.
Pozwólcie, że wyjaśnię, tym z was, którzy tak jak ja nie chcą bawić się plikami systemowymi tylko dlatego, że ktoś im o tym powiedział.
Problemem jest:
- wiele skryptów systemowych ma zakodowane na stałe w python3 shebang. Możesz to sprawdzić samodzielnie:
~$ grep -R "\#\!/usr/bin/python3" /usr/lib/*
/usr/lib/cnf-update-db:
/usr/lib/command-not-found:
/usr/lib/cups/filter/pstotiff:
/usr/lib/cups/filter/rastertosag-gdi:
grep: /usr/lib/cups/backend/cups-brf: Permission denied
/usr/lib/cups/backend/hpfax:
/usr/lib/language-selector/ls-dbus-backend:
/usr/lib/python3/dist-packages/language_support_pkgs.py:
/usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py:
/usr/lib/python3/dist-packages/cupshelpers/installdriver.py:
/usr/lib/python3/dist-packages/cupshelpers/openprinting.py:
/usr/lib/python3/dist-packages/cupshelpers/xmldriverprefs.py:
/usr/lib/python3/dist-packages/cupshelpers/smburi.py:
/usr/lib/python3/dist-packages/cupshelpers/ppds.py:
/usr/lib/python3/dist-packages/cupshelpers/debug.py:
/usr/lib/python3/dist-packages/DistUpgrade/dist-upgrade.py:
/usr/lib/python3/dist-packages/CommandNotFound/db/creator.py:
/usr/lib/python3/dist-packages/CommandNotFound/db/db.py:
/usr/lib/python3/dist-packages/Quirks/quirkreader.py:
grep: /usr/lib/ssl/private: Permission denied
/usr/lib/system-service/system-service-d:
/usr/lib/ubuntu-release-upgrader/check-new-release-gtk:
/usr/lib/ubuntu-release-upgrader/do-partial-upgrade:
/usr/lib/ubuntu-release-upgrader/check-new-release:
/usr/lib/update-notifier/package-data-downloader:
/usr/lib/update-notifier/backend_helper.py:
/usr/lib/update-notifier/apt_check.py:
/usr/lib/update-notifier/apt-check:
- python apt package
python-apt
/ python3-apt
to pakiet systemowy, więc jest przeznaczony dla domyślnego systemu python
W ten sposób skrypty zawsze uzyskują wersję, do której aktualnie jest dowiązana python3
, ale zawiodą, ponieważ nie ma pakietu apt.
Ogólne rozwiązanie: NIGDY nie zmieniaj domyślnego python3
łącza. Zawsze. Dotyczy to równieżpython
linku - jeśli aplikacja została napisana w Pythonie2 z niektórymi starymi elementami składni, które nie działają w Python3, aplikacja nie będzie działać.
[Mój terminal się zepsuł, ponieważ używam Terminatora, który najwyraźniej jest napisany w Pythonie2.7 niekompatybilnym z Python3.]
Przedstawione tutaj rozwiązania sugerują kopiowanie / łączenie plików pakietu apt lub zmianę python3
łącza.
Przeanalizujmy oba:
- Kopiowanie / linkowanie pakietu apt
Nie powinno to stanowić problemu, ponieważ w okolicach Pythona 3.4 wszystkie skrypty Pythona działają również na nowszych wersjach.
Jak dotąd. Ale może się zepsuć w przyszłości - jeśli utrzymasz swój system wystarczająco długo.
- Zmiana
python3
łącza z powrotem
To świetne rozwiązanie, ponieważ możemy wrócić do „nigdy przenigdy nie zmieniać linku”
„Ale ja lubię pisać po prostu python
!” - Też to lubię! Tak właśnie doszedłem do tego problemu!
Ogólnie rzecz biorąc, należy unikać ręcznej zmiany łączy systemowych - update-alternatives
zamiast tego używaj do łączenia różnych wersji . Dotyczy to każdej aplikacji z wieloma wersjami. To nadal spowoduje uszkodzenie skryptów systemowych (ponieważ zmienia łącze), ale możesz łatwo przełączać się tam i z powrotem, nie martwiąc się, czy umieścisz link i miejsce docelowe we właściwej kolejności, czy popełniłeś literówkę.
Rozważ użycie innej nazwy niż python
/ python3
dla swojego łącza lub aliasu.
Lub dodaj własne python
/ python3
link do PATH (tak jak robią to środowiska wirtualne), bez zmiany linków systemowych.