Skip to content

Latest commit

 

History

History
62 lines (39 loc) · 2.04 KB

Fix ModuleNotFoundError No module named 'apt_pkg'.md

File metadata and controls

62 lines (39 loc) · 2.04 KB

This is a common issue when you manually update your system's Python version.

Let's understand the problem:

When we install the python binding for apt (either python3-apt or python-apt), it places a shared object file within /usr/lib/python3/dist-packages. It might look like this:

apt_pkg.cpython-310-x86_64-linux-gnu.so

Here, 310 is my python version, maybe your one will say 36m python-3.6 or maybe 38 python-3.8

Now, most of the times you'll see just one old obj file in that location. Say you had python 3.10 and you upgraded to 3.11. But inside /usr/lib/python3/dist-packages you'll see

    /usr/lib/python3/dist-packages ❯ ls -l | grep -i 'apt_pkg.c'
.rw-r--r--  351k root 30 Nov  2022  apt_pkg.cpython-310-x86_64-linux-gnu.so

If you've been using the OS for a while, you might find more than one file:

    /usr/lib/python3/dist-packages ❯ ls -l | grep -i 'apt_pkg.c'
.rw-r--r--  351k root 30 Nov  2022  apt_pkg.cpython-310-x86_64-linux-gnu.so
.rw-r--r--  351k root 30 Nov  2022  apt_pkg.cpython-39-x86_64-linux-gnu.so

Now, what's happening is, there's no new obj file to point to our latest python binary.

The solution,

We could create a symlink from the existing old image to apt_pkg.so. But since symlinks can be fragile and might break if the referenced file gets deleted, it's better to copy it directly as apt_pkg.so.

doing,

sudo cp apt_pkg.cpython-310-x86_64-linux-gnu.so apt_pkg.so

will fix it. remember to put your image name there.

Now, if there are multiple old images, choose the closest to your python version

If there are apt_pkg.cpython-310-x86_64-linux-gnu.so and apt_pkg.cpython-39-x86_64-linux-gnu.so

select apt_pkg.cpython-310-x86_64-linux-gnu.so

When copying, if you encounter something like

cp: failed to access '/usr/lib/python3/dist-packages/apt_pkg.so': Too many levels of symbolic links

Simply unlink apt_pkg.so then run,

sudo cp apt_pkg.cpython-310-x86_64-linux-gnu.so apt_pkg.so

Thsi should fix it :)