没有找到名为distutils的模块...但是已安装了distutils吗?

22
我想升级我的Python版本(在这种情况下是3.10),所以在安装了Python3.10之后,我尝试添加一些我使用的模块,比如OpenCV,但遇到了以下问题:
jeremy@jeremy-Blade:~$ python3.10 -m pip install opencv-python 
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'

jeremy@jeremy-Blade:~$ sudo apt-get install python3-distutils
[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.

由于似乎已经安装了distutils,我不知道如何继续。


对我来说,pip install disutils解决了这个问题。我使用的是Python 3.7版本。 - undefined
这与你的Python版本有关。 - undefined
9个回答

41

看起来distutils有版本控制,因此之后

jeremy@jeremy-Blade:~$ sudo apt-get install python3.10-distutils 
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) ...

jeremy@jeremy-Blade:~$ python3.10 -m pip install opencv-python 

似乎可以继续进行。


2
对我没起作用,我仍然得到了 "ModuleNotFoundError: No module named 'distutils.util'"。 - Definity
抱歉,我不确定是什么原因导致了这个问题,你能否发布完整的错误信息或者重新提一个新问题? - jeremy_rutman

20

distutils包在Python版本3.12中被移除。

它在Python 3.10中通过PEP 632“Deprecate distutils module”被弃用。对于仍在使用distutils且无法更新到其他库的项目,可以安装setuptools项目:它仍然提供distutils功能。

https://docs.python.org/3.12/whatsnew/3.12.html


https://peps.python.org/pep-0632/#migration-advice - undefined

12
在您的机器上安装setuptools
pip install setuptools

这解决了我的问题。

对于安装了最新版本Python(3.12)的人来说,这个方法有效。有人能解释一下为什么吗?谢谢 - undefined
你可以查看PR gh-95299,其中指出:在使用venv创建的虚拟环境中不要预先安装setuptools。这意味着distutils、setuptools、pkg_resources和easy_install将不再默认可用;要访问这些工具,请在激活的虚拟环境中运行pip install setuptools。 - undefined

11
这对我很有帮助。
sudo apt-get install --reinstall python3.7-distutils

您也可以将3.7替换为您的Python版本。


4
sudo apt-get install python3.9-distutils

这解决了我的问题,我正在使用Python3.9


0

这解决了我的问题

sudo apt-get install python3.10-distutils

我正在使用Python 3.10


0

安装 distutils 适用于你的-python版本

!sudo apt-get install python<your-python-version>-distutils

例如,安装在3.8版本中。
sudo apt-get install python3.8-distutils

规范:在Python 3.10和3.11中,distutils将正式标记为弃用。此时将关闭所有已知问题。
注意:您仍然可以在3.10和3.11中使用distutils,但会收到警告,并且不会修复任何出现的问题。但是,从Python 3.12开始,导入distutils的代码将不再起作用。
更多信息,请参阅迁移建议

0
py -m ensurepip --upgrade

我的问题是我无法使用pip或sudo来安装任何东西,所以上述命令重新安装了pip并解决了问题。希望这对其他寻找解决方案的人有所帮助。

-4

刚刚升级到新版本,一切都正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接