Ubuntu 18.LTS가 있는데 실수로 트리거되었습니다.
대안 업데이트 --config python3.6
이제 터미널, 터미네이터 및 apt가 작동하지 않는 것 같아서 시스템이 손상된 것 같습니다.
터미네이터
Traceback (most recent call last):
File "/usr/bin/terminator", line 23, in <module>
import psutil
ModuleNotFoundError: No module named 'psutil'
단말기
Traceback (most recent call last):
File "/usr/bin/gnome-terminal", line 9, in <module>
from gi.repository import GLib, Gio
ModuleNotFoundError: No module named 'gi'
쉬운
예를 들어 저장소를 추가해 보세요(이 모든 프로그램의 기본값인 것 같아서 3.5를 설치해 보았습니다).
internetmosquito@internetmosquito-PE72-7RD ~ sudo add-apt-repository ppa:deadsnakes/ppa
Traceback (most recent call last):
File "/usr/bin/add-apt-repository", line 12, in <module>
from softwareproperties.SoftwareProperties import SoftwareProperties, shortcut_handler
ModuleNotFoundError: No module named 'softwareproperties'
이제 pyenv를 사용하여 다양한 버전의 Python을 설치했다고 말씀드리고 싶습니다.
✘ internetmosquito@internetmosquito-PE72-7RD ~ pyenv versions
system
2.7.13
* 3.8.3 (set by /home/internetmosquito/.pyenv/version)
3.9-dev
대부분은 /home/internetmosquito/.pyenv/versions에 설치됩니다.
internetmosquito@internetmosquito-PE72-7RD ~ ls -ltra /home/internetmosquito/.pyenv/versions
total 20
drwxr-xr-x 6 internetmosquito internetmosquito 4096 jun 13 2020 3.9-dev
drwxr-xr-x 6 internetmosquito internetmosquito 4096 jun 16 2020 3.8.3
drwxrwxr-x 13 internetmosquito internetmosquito 4096 sep 27 20:35 ..
drwxr-xr-x 6 internetmosquito internetmosquito 4096 feb 9 01:05 2.7.13
drwxr-xr-x 5 internetmosquito internetmosquito 4096 feb 9 02:12 .
이제 /usr/bin/python을 확인하면 다음이 표시됩니다.
internetmosquito@internetmosquito-PE72-7RD ~ ls -ltra /usr/bin/python*
lrwxrwxrwx 1 root root 16 mar 13 2020 /usr/bin/python3-config -> python3.8-config
lrwxrwxrwx 1 root root 9 mar 13 2020 /usr/bin/python2 -> python2.7
-rwxr-xr-x 1 root root 388 mar 28 2020 /usr/bin/python3-pasteurize
-rwxr-xr-x 1 root root 384 mar 28 2020 /usr/bin/python3-futurize
-rwxr-xr-x 1 root root 152 abr 9 2020 /usr/bin/python3-pbr
lrwxrwxrwx 1 root root 33 jul 28 2020 /usr/bin/python3.8-config -> x86_64-linux-gnu-python3.8-config
-rwxr-xr-x 1 root root 5486352 jul 28 2020 /usr/bin/python3.8
-rwxr-xr-x 1 root root 3629032 ago 4 2020 /usr/bin/python2.7
lrwxrwxrwx 1 root root 25 feb 8 23:49 /usr/bin/python3 -> /etc/alternatives/python3
lrwxrwxrwx 1 root root 24 feb 9 00:50 /usr/bin/python -> /etc/alternatives/python
Python 3.5를 사용하는 "제 생각에는" 터미네이터가 없는 것 같습니다...
internetmosquito@internetmosquito-PE72-7RD ~ cat /usr/bin/terminator
#!/usr/bin/python3
내 python3 구문 분석은 실제로 내 Python과 동일합니다 ...
internetmosquito@internetmosquito-PE72-7RD ~ python
Python 3.8.3 (default, Jun 16 2020, 18:30:59)
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
internetmosquito@internetmosquito-PE72-7RD ~ python3
Python 3.8.3 (default, Jun 16 2020, 18:30:59)
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
대안을 다시 업데이트하려고 하면 이 메시지가 나타납니다...
internetmosquito@internetmosquito-PE72-7RD ~ sudo update-alternatives --config python3
There is only one alternative in link group python3 (providing /usr/bin/python3): /usr/local/bin/python3.7
Nothing to configure.
거기에 왜 python3.7이 언급되어 있는지 모르시나요? /usr/local/bin에 여러 개의 비단뱀이 있습니다.
✘ internetmosquito@internetmosquito-PE72-7RD ~ ls -ltra /usr/local/bin/python*
lrwxrwxrwx 1 root root 17 dic 24 2018 /usr/local/bin/python3.7-config -> python3.7m-config
-rwxr-xr-x 2 root root 14925232 dic 24 2018 /usr/local/bin/python3.7m
-rwxr-xr-x 2 root root 14925232 dic 24 2018 /usr/local/bin/python3.7
-rwxr-xr-x 1 root root 3097 dic 24 2018 /usr/local/bin/python3.7m-config
-rwxr-xr-x 2 root root 14642520 feb 9 00:46 /usr/local/bin/python3.5m
-rwxr-xr-x 2 root root 14642520 feb 9 00:46 /usr/local/bin/python3.5
-rwxr-xr-x 1 root root 3071 feb 9 00:46 /usr/local/bin/python3.5m-config
lrwxrwxrwx 1 root root 17 feb 9 00:46 /usr/local/bin/python3.5-config -> python3.5m-config
lrwxrwxrwx 1 root root 9 feb 9 00:46 /usr/local/bin/python3 -> python3.5
lrwxrwxrwx 1 root root 16 feb 9 00:46 /usr/local/bin/python3-config -> python3.5-config
가장 중요한 것은 lsb_release도 작동하지 않는다는 것입니다!
internetmosquito@internetmosquito-PE72-7RD ~ lsb_release -a
Traceback (most recent call last):
File "/usr/bin/lsb_release", line 25, in <module>
import lsb_release
ModuleNotFoundError: No module named 'lsb_release'
얼마나 많은 것들이 손상되었는지조차 모릅니다... Ubuntu를 다시 설치해야 한다는 의미가 아닌 정상으로 돌아가는 방법에 대한 제안이 있습니까?
감사해요!
@Stewart의 답변을 기반으로 업데이트되었습니다.
나는 여기에 게시한 결과를 얻기 위해 Xterm을 사용하고 있습니다. 그런데, 저는 20.04가 아니라 18.04에 있어요
그럼 당신의 제안으로 돌아가서
internetmosquito@internetmosquito-PE72-7RD ~ file $(which terminator) $(which xterm) $(which gnome-terminal)
/usr/bin/terminator: symbolic link to ../share/terminator/terminator
/usr/bin/xterm: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=abd5692fa8891e01f24e8ae7f40f218662f098d9, for GNU/Linux 3.2.0, stripped
/usr/bin/gnome-terminal: Python script, ASCII text executable
내 gnome 터미널도 Python을 기반으로 하는 것 같나요?
internetmosquito@internetmosquito-PE72-7RD ~ file $(which add-apt-repository) $(which apt) $(which apt-cache) $(which dpkg)
/usr/bin/add-apt-repository: Python script, ASCII text executable
/usr/bin/apt: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=c460d1db846110f4ae24cb54b4cfee967d022c09, for GNU/Linux 3.2.0, stripped
/usr/bin/apt-cache: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2e75b0850b2936259281b093ecf906bf70a1d7b8, for GNU/Linux 3.2.0, stripped
/usr/bin/dpkg: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=978cfb3eb2e5cee720ae1c551c12595f1aa211f5, for GNU/Linux 3.2.0, stripped
적절한 등을 확인하십시오.
internetmosquito@internetmosquito-PE72-7RD ~ file $(which add-apt-repository) $(which apt) $(which apt-cache) $(which dpkg)
/usr/bin/add-apt-repository: Python script, ASCII text executable
/usr/bin/apt: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=c460d1db846110f4ae24cb54b4cfee967d022c09, for GNU/Linux 3.2.0, stripped
/usr/bin/apt-cache: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2e75b0850b2936259281b093ecf906bf70a1d7b8, for GNU/Linux 3.2.0, stripped
/usr/bin/dpkg: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=978cfb3eb2e5cee720ae1c551c12595f1aa211f5, for GNU/Linux 3.2.0, stripped
이제 Python 3을 확인하려고 하면
internetmosquito@internetmosquito-PE72-7RD ~ ls -go $(which python3)
-rwxrwxr-x 1 424 jun 13 2020 /home/internetmosquito/.pyenv/shims/python3
따라서 pyenv가 설치한 Python을 가리키는 것 같습니다.
답변1
먼저 Python에 의존하지 않는 터미널을 사용하는 것이 좋습니다. gnome-terminal
아니면 xterm
작동합니다:
$ file $(which terminator) $(which xterm) $(which gnome-terminal)
/usr/bin/terminator: Python script, ASCII text executable
/usr/bin/xterm: ELF 64-bit LSB pie executable, ...
/usr/bin/gnome-terminal: ELF 64-bit LSB pie executable, ...
, 및 는 add-apt-repository
Python 스크립트일 수 있지만 여전히 작동하지 않으며 작동해야 합니다.apt
dpkg
$ file $(which add-apt-repository) $(which apt) $(which apt-cache) $(which dpkg)
/usr/bin/add-apt-repository: Python script, ASCII text executable
/usr/bin/apt: ELF 64-bit LSB pie executable, x86-...
/usr/bin/apt-cache: ELF 64-bit LSB pie executable, x86-...
/usr/bin/dpkg: ELF 64-bit LSB pie executable, x86-
apt
일부 깨진 링크를 포함하여 깨진 패키지를 다시 설치/재구성하는 데 사용할 수 있습니다 . 저는 Debian에서 테스트 중이지만 Debian과 Ubuntu의 핵심 Python 패키지는 같은 사람이 관리하므로 여러분에게도 비슷할지는 의문입니다. 여기에서 관련 패키지를 찾고 있습니다.
$ ls -go $(which python3)
lrwxrwxrwx 1 9 Dec 23 07:05 /usr/bin/python3 -> python3.9
$ dpkg -S $(which python3) $(which python3.9)
python3-minimal: /usr/bin/python3
python3.9-minimal: /usr/bin/python3.9
$ apt-cache show python3 | grep Depends:
Depends: python3.9 (>= 3.9.1-1~), ...
Pre-Depends: python3-minimal (= 3.9.1-1)
$ apt-cache show python3.9 | grep Depends:
Depends: python3.9-minimal (= 3.9.1-4)...
이제 우리는 어떤 패키지가 이 링크와 이와 관련된 바이너리를 처리하는지 알고 있습니다. 귀하의 경우 Ubuntu 20.04를 사용하고 있으므로 python3.8
대신 python3.9
.
나는 다음을 사용하여 문제를 해결하려고 노력할 것입니다.
sudo apt reinstall python3 python3-minimal python3.8 python3.8-minimal
특별한 점은 /var/lib/dpkg/info/<package>.{pre,post}{inst,rm}
바이트 컴파일 및 사용(해당하는 경우)을 수행하는 스크립트를 다시 호출한다는 것입니다 update-alternatives
.
이것이 작동하지 않으면 출력을 살펴보겠습니다 update-alternatives --config python3
. 데비안 테스트에서 나는 다음을 얻습니다:
$ update-alternatives --config python3
update-alternatives: error: no alternatives for python3
동일한 결과를 얻으면 대안이 더 이상 Python3을 관리하지 않는다는 의미입니다. 이것이 언제 변경되었는지는 확실하지 않으며, 이를 이해하지 못한다면 이것이 컴퓨터 문제의 원인일 수 있습니다. 이전 python3 버전이 제거되면 prerm
담당 버전이 update-alternatives --remove python3
실행되지 않습니다. 실행해보고 update-alternatives --config python3
어떤 옵션이 사용 가능한지 확인하세요. 옵션이 있고 python3.8
우선순위가 가장 높은 경우 이 옵션을 다시 실행 sudo
하고 을 선택하십시오 auto
.
$ update-alternatives --config python3
There are 3 choices for the alternative python3 (providing /usr/bin/python3).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/python3.8 1111 auto mode
1 /usr/bin/python3.5 1101 manual mode
2 /usr/bin/python3.8 1111 manual mode
3 /usr/bin/python3.7 1081 manual mode
그러나 나는 python3.8
그것이 귀하의 목록에 없는 것으로 생각하며 이것이 귀하에게 문제가 있는 이유입니다. Debian Buster(2018년에 출시됨)에도 python3.7이 있으므로 python3.5는 꽤 오래되었습니다. 이제 패키지가 링크를 자체적으로 관리 하므로 python3
실행 시 update-alternatives --config python3
좋은 링크를 오래된 링크로 바꿀 수 있습니다 . 이 경우 python3을 수동으로 제거합니다.
sudo update-alternatives --remove-all python3
그런 다음 Python 패키지를 다시 설치하십시오.
새 버전이 출시될 때마다 python3
아카이브의 모든 종속 패키지에 대해 테스트를 실행하는 데 약간의 시간이 소요됩니다. 패키지가 실패하면 버그 보고서가 제출되고 관리자는 패키지가 최신 버전에서 작동하는지 확인하기 위해 최선을 다합니다 python3
. 일반적으로 여러 포인트 버전을 설치할 필요는 없습니다. terminator
최신 python3
. 공식 배포 범위를 terminator
벗어나고 python3.5
.