Search code examples
pythonubuntudistutils

No module named 'distutils.util' ...but distutils is installed?


I was wanting to upgrade my Python version (to 3.10 in this case), so after installing Python 3.10, I proceeded to try adding some modules I use, e.g., opencv, which ran into:

python3.10 -m pip install opencv-python

Output:

Traceback (most recent call last):
  File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.10/runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "/usr/lib/python3/dist-packages/pip/__main__.py", line 16, in <module>
    from pip._internal.cli.main import main as _main  # isort:skip # noqa
  File "/usr/lib/python3/dist-packages/pip/_internal/cli/main.py", line 10, in <module>
    from pip._internal.cli.autocompletion import autocomplete
  File "/usr/lib/python3/dist-packages/pip/_internal/cli/autocompletion.py", line 9, in <module>
    from pip._internal.cli.main_parser import create_main_parser
  File "/usr/lib/python3/dist-packages/pip/_internal/cli/main_parser.py", line 7, in <module>
    from pip._internal.cli import cmdoptions
  File "/usr/lib/python3/dist-packages/pip/_internal/cli/cmdoptions.py", line 19, in <module>
    from distutils.util import strtobool
ModuleNotFoundError: No module named 'distutils.util'

And

sudo apt-get install python3-distutils

Output:

[sudo] password for jeremy:
Reading package lists... Done
Building dependency tree
Reading state information... Done
python3-distutils is already the newest version (3.8.10-0ubuntu1~20.04).
...
0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.

Since distutils already seems to be installed, I can't grok how to proceed.


Solution

  • It looks like distutils has versioning, so after the following, it seems to be able to proceed.

    sudo apt-get install python3.10-distutils
    

    Output:

    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    ...
    Setting up python3.10-lib2to3 (3.10.0-1+focal1) ...
    Setting up python3.10-distutils (3.10.0-1+focal1) ...
    

    And:

    python3.10 -m pip install opencv-python