23

Here is the specific problem:

The following packages have unmet dependencies:
 libpython3.10-stdlib : Depends: libpython3.10-minimal (= 3.10.4-1+focal1) but it is not going to be installed
 python3.10-minimal : Depends: libpython3.10-minimal (= 3.10.4-1+focal2) but it is not going to be installed
                      Recommends: python3.10 but it is not going to be installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).

Which package should I purge or reinstall? The system doesn't allow to do neither autoremove, fix broken, dist-upgrade?

Kubuntu 20.04 LTS

karel
  • 114,770

3 Answers3

46

Edit: To summarize, I purged the packages and installed python3.10 as a new package. According to others who followed this, you do not need to remove and add the ppa as I did. I am removing that from the answer. It has also been suggested that merely forcing the install with sudo apt install -yf has worked when this issue came up in past versions. I can't verify because I did the following instead:

I had installed Python 3.10 using deadsnakes.

The issue and solution are described here:
libpython3.10-minimal and libpython3.10-stdlib fail to install #207

I ran the suggested command (explained in more detail at the end of this answer):
sudo apt --fix-missing purge $(dpkg -l | grep 'python3\.1[01]' | awk '{print $2}')

This prompted with:

The following packages will be REMOVED: idle-python3.10* libpython3.10-minimal* libpython3.10-stdlib*
libpython3.10-testsuite* python3.10* python3.10-distutils*
python3.10-examples* python3.10-full* python3.10-gdbm* python3.10-lib2to3* python3.10-minimal* python3.10-tk* python3.10-venv*

Note that there may be other packages removed with this command.

As suggested, I ran:
sudo apt --fix-broken install

There wasn't anything to fix because it had been purged.

Next I went ahead and upgraded unrelated packages before continuing:
sudo apt upgrade

At this point, running python --version showed it had rolled back to Python 3.8.10. I want Python 3.10 again so I ran:
sudo apt install python3.10

This prompted with:

The following additional packages will be installed:
libpython3.10-minimal libpython3.10-stdlib python3.10-minimal Suggested packages: python3.10-venv The following NEW packages will be installed: libpython3.10-minimal libpython3.10-stdlib python3.10 python3.10-minimal

The new install was a success!


Explanation For Cautious Beginners

The command used for purging python3.10 packages was:
sudo apt --fix-missing purge $(dpkg -l | grep 'python3\.1[01]' | awk '{print $2}')

The description of --fix-missing is found in man -apt-get:

Ignore missing packages; if packages cannot be retrieved or fail the integrity check after retrieval (corrupted package files), hold back those packages and handle the result. Use of this option together with -f may produce an error in some situations. If a package is selected for installation (particularly if it is mentioned on the command line) and it could not be downloaded then it will be silently held back.

purge:

purge is identical to remove except that packages are removed and purged (any configuration files are deleted too).

For the package names, a command substitution is used.

dpkg -l package-name-pattern...:

List packages matching given pattern.

Because no pattern was given for dpkg, a list of all installed packages is returned. In lieu of a pattern, the list is piped into grep so we can used the pattern 'python3\.1[01]' to narrow the list down to installed python3.10 packages. These results are then piped into awk '{print $2}'.

awk '{print $2}':

To put it simply, this awk a pattern scanning command. Here it returns only the package name from each line in the list. To better understand, run these commands together and observe the output:

dpkg -l | grep 'python3\.1[01]' | awk '{print $2}'

This should output a list of all of installed python3.10 package names, such as:

libpython3.10-minimal:amd64
libpython3.10-stdlib:amd64
python3.10
python3.10-distutils
python3.10-lib2to3
python3.10-minimal
python3.10-venv

The end result is the same as if you had entered all python3.10 packages yourself:

sudo apt --fix-missing purge libpython3.10-minimal:amd64 libpython3.10-stdlib:amd64 python3.10 python3.10-distutils python3.10-lib2to3 python3.10-minimal python3.10-venv

Now the system should be ready for a new install of python3.10.

iyrin
  • 1,390
  • 15
  • 21
  • 4
    Don't do alias python='python3.10'. The whole package management system might break. See https://askubuntu.com/q/1374341/124466 Either use a virtual environment, or call it with python3.10. – Archisman Panigrahi Apr 15 '22 at 06:55
  • I have this issue, so I tried forcing the install, did not work. – Mike Lippert Apr 15 '22 at 14:18
  • 1
    I then tried the suggested purge, and reinstall and that worked, thanks. And the link to the issue was much appreciated, oh and i didn't remove and put back the deadsnakes ppa – Mike Lippert Apr 15 '22 at 14:25
  • Thank you, that worked! I also don't suggest to do alias, but rather than that answer make sense – vulkanovski Apr 15 '22 at 20:50
  • Thanks for the follow up, Mike. I will note it in the answer. Thanks for the tips on not using alias for this as well. – iyrin Apr 16 '22 at 04:11
  • this was the perfect answer. I wish I could give this more points. very concise. – H Bensiali Apr 25 '22 at 19:04
  • 1
    After reinstall of 3.10.. if you have 2 versions of python installations (eg. 3.8 and 3.10), you have to link the newly installed 3.10 to /usr/bin/python3 using the below command. sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 2 – Daniel Inbaraj Apr 27 '22 at 06:46
  • 1
    Warning - Copy pasting this command as it is broke my system due to messed up dependencies. Use proper commands applicable to you after understanding what you are doing. – workwise Feb 20 '23 at 10:58
  • I tried the suggested answer to force the install from your edit and it didn't work for me. However, it worked with the command you ran on your system. – jennyfofenny Aug 01 '23 at 18:06
6

This is how I fixed it for me:

$ sudo dpkg --force-depends --purge libpython3.10-stdlib

You will get a warning - ignore. Next:

$ sudo apt --fix-broken install

Finally:

$ sudo apt update
Peter
  • 61
0

The following worked for me:

sudo dpkg -i --force-overwrite /var/cache/apt/archives/libpython3.10-*