14

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? Apr 14 at 10:54
  • I also run anaconda on system
    – stepski011
    Apr 14 at 11:01
  • Anaconda is not a systemwide installation. How did you install python3.10? Apr 14 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
    – stepski011
    Apr 14 at 11:13
  • 2
    Your question is showing errors about python3.10. How did you install that? Are you using the deadsnakes PPA? Apr 14 at 11:25

2 Answers 2

25

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.

7
  • 3
    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. Apr 15 at 6:55
  • I have this issue, so I tried forcing the install, did not work. Apr 15 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 Apr 15 at 14:25
  • Thank you, that worked! I also don't suggest to do alias, but rather than that answer make sense
    – stepski011
    Apr 15 at 20:50
  • 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 Apr 27 at 6:46
3

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

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.