0

I have an Ubuntu 18.LTS and accidentally triggered

update-alternatives --config python3.6

That seems to have broken my system since now neither terminal, terminator and apt seems to be not working

Terminator

Traceback (most recent call last):
  File "/usr/bin/terminator", line 23, in <module>
    import psutil
ModuleNotFoundError: No module named 'psutil'

Terminal

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'

apt

Trying for instance to add repository (just trying to install 3.5 as it seems to be the default used for all this programs)

 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'

Now, I must say I have different versions of Python that I have installed with pyenv:

 ✘ internetmosquito@internetmosquito-PE72-7RD  ~  pyenv versions
  system
  2.7.13
* 3.8.3 (set by /home/internetmosquito/.pyenv/version)
  3.9-dev

Most of those are installed in /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 .

Now if I check /usr/bin/python I see the following

 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

Seems I don't have a Python 3.5 which "I think" is what terminator uses...

 internetmosquito@internetmosquito-PE72-7RD  ~  cat /usr/bin/terminator 
#!/usr/bin/python3

And my python3 resolves to actually the same as my 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.
>>> 

If I try to update-alternatives again, I get this message...

 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.

Not even sure why it mentions python3.7 there? I do see though several pythons in /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

On top of this lsb_release does not work either!

 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'

Don't even know how many other stuff is broken...any suggestions on getting back to normal that don't imply having to re-install Ubuntu?

Thanks!

UPDATE BASED ON RESPONSE FROM @Stewart

I'm using Xterm to get output I'm posting here. By the way I'm on 18.04, not 20.04

So going back to your suggestions

 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

So looks like my gnome-terminal is Python based too?

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

Checking apt and the like:

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

Now when I try to check Python 3

 internetmosquito@internetmosquito-PE72-7RD  ~  ls -go $(which python3)  
-rwxrwxr-x 1 424 jun 13  2020 /home/internetmosquito/.pyenv/shims/python3

So it looks like this pointing to some python installed by pyenv

5
  • Bingo! You found the problem! pyenv's python3 is interferring with your distribution's python3. The solution is either to uninstall pyenv or to fix pyenv, Unfortunately, I can't help you further as pyenv isn't in Debian's archive. I would offer the advice that a single package management tool is usually enough. Debian packages are made (and tested) to work with other Debian packages, so using third party tools (even pip) is rarely optimal. – Stewart Feb 9 at 18:31
  • @Stewart I'd like to keep pyenv but I don't mind uninstalling it if it fixes the issue. Even if I uninstall it...how do I get back my system-wide python up & running? – AlejandroVK Feb 9 at 18:34
  • It may be as simple as removing ~/.pyenv/shims/ from $PATH. Do that and check which python3 again. Otherwise, the apt reinstall steps could be necessary. – Stewart Feb 9 at 18:36
  • Actually, if you log in as a different (new?) user, you shouldn't have access to that pyenv installation. That's a good way to see if it's your machine or just your user which is broken. If it's just the user, then you should never need any commands requiring sudo to solve it. – Stewart Feb 9 at 18:41
  • @Stewart I tried but after rebooting I was getting no keyboard or mouse on login...I just reinstalled Ubuntu..thanks for the help anyway! – AlejandroVK Feb 10 at 17:23
0

First, I suggest using a terminal which is not dependent on python. gnome-terminal or xterm would work:

$ 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, ...

While add-apt-repository may be a python script, apt, and dpkg are not and should still work for you:

$ 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-

You can use apt to re-install / reconfigure the broken package including some broken links. I'm on Debian Testing, but the core python packages for Debian and Ubuntu are maintained by the same person, so I suspect it's similar for you. Here I'm looking for the relevant packages:

$ 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)...

Now we know which packages handle this link and the binaries associated with it. In your case, you are on Ubuntu 20.04, so you'll want python3.8 instead of python3.9.

I would try to fix it with:

sudo apt reinstall python3 python3-minimal python3.8 python3.8-minimal

What's special about this is that it re-invokes the scripts in /var/lib/dpkg/info/<package>.{pre,post}{inst,rm} which are responsible for performing any byte-compilation, and using update-alternatives (when appropriate).

If this doesn't work, I'd take a look at the output of update-alternatives --config python3. On Debian testing I get:

$ update-alternatives --config python3
update-alternatives: error: no alternatives for python3

If you get the same thing, it means alternatives no longer manage python3. I'm not sure when this changed, if you don't get this it's probably why there's a problem on your machine. When an old python3 version was removed, the prerm responsible for update-alternatives --remove python3 was never run. Try running update-alternatives --config python3 and check what options are available. If you have python3.8 as an option, and it's the highest priority, then rerun this as sudo and select 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

However, I suspect python3.8 is not in your list and this is why you are having problems. Even with Debian buster (released in 2018), we had python3.7 so python3.5 is pretty old. Since python3 packages now manage links on their own, when you ran update-alternatives --config python3 you probably replaced the good link with something that's out of date. In this case, I'd manually remove the python3 alternative with:

sudo update-alternatives --remove-all python3

Then re-install the python packages again.

Whenever a new python3 is released, there is some time spent running tests on all dependent packages in the archive. If a package fails, then bug reports are filed and maintainers do what they can to ensure their package works with the latest version of python3. You don't normally need to have multiple point-releases installed. terminator should work fine with the latest python3. I suspect it would have otherwise been removed from the archive if it failed the transition and never released with Ubuntu 20.04. The exception to this are PPAs (or any 3rd party repository), which are beyond the reach of the official distributions and could have anything in them including a version of terminator which only works with python3.5.

4
  • Hello @Stewart, – AlejandroVK Feb 9 at 17:26
  • Hello @Stewart, I think the problem is with pyenv...if I run this ls -go $(which python3) I see the following -rwxrwxr-x 1 424 jun 13 2020 /home/internetmosquito/.pyenv/shims/python3 running pyenv global, seems it's managed by pyenv now ✘ internetmosquito@internetmosquito-PE72-7RD  ~  pyenv global 3.8.3 internetmosquito@internetmosquito-PE72-7RD  ~  pyenv versions system 2.7.13 * 3.8.3 (set by /home/internetmosquito/.pyenv/version) 3.9-dev – AlejandroVK Feb 9 at 17:48
  • Gosh will edit my answer...this comments is useless – AlejandroVK Feb 9 at 17:49
  • please check my updated response, not sure how to proceed since it seems my python3 alias is pointing to a python installed by pyenv – AlejandroVK Feb 9 at 18:19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.