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

9
  • How did you install python3.10 in Ubuntu 20.04? Commented Apr 14, 2022 at 10:54
  • I also run anaconda on system Commented Apr 14, 2022 at 11:01
  • Anaconda is not a systemwide installation. How did you install python3.10? Commented Apr 14, 2022 at 11:10
  • @ArchismanPanigrahi current python3 version is Python 3.8.12...after apt-get dist-upgrade the dependencies broke. I use aptitude for every package Commented Apr 14, 2022 at 11:13
  • 2
    Your question is showing errors about python3.10. How did you install that? Are you using the deadsnakes PPA? Commented Apr 14, 2022 at 11:25

3 Answers 3

48

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.

9
  • 4
    Don't do alias python='python3.10'. The whole package management system might break. See askubuntu.com/q/1374341/124466 Either use a virtual environment, or call it with python3.10. Commented Apr 15, 2022 at 6:55
  • I have this issue, so I tried forcing the install, did not work. Commented Apr 15, 2022 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 Commented Apr 15, 2022 at 14:25
  • 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 Commented Apr 27, 2022 at 6: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
    Commented Feb 20, 2023 at 10:58
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
0

The following worked for me:

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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .