Kubuntu22.04升级Python3.13后distutils缺失报错求助
问题描述
环境信息
- Kubuntu 22.04 | 6.5.0-17内核
- Python版本:从3.10升级至3.13
操作与报错
为体验Python 3.13,添加第三方软件源后通过sudo apt安装了python3.13、python3.13-dev、python3.13-minimal。随后用Python 3.10运行以下脚本,尝试为3.13安装适配的旧软件包:
pkgs = eval(str(sbp.run("pip3 list -o --format=json", shell=True, stdout=sbp.PIPE).stdout, encoding='utf-8')) for pkg in pkgs: sbp.run("python3.13 -m pip install " + pkg['name'], shell=True)
执行后报错,手动执行python3.13 -m pip install SomePackage时,抛出ModuleNotFoundError: No module named 'distutils'异常,具体栈信息如下:
Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "/usr/lib/python3/dist-packages/pip/__main__.py", line 29, in <module> from pip._internal.cli.main import main as _main File "/usr/lib/python3/dist-packages/pip/_internal/cli/main.py", line 9, in <module> from pip._internal.cli.autocompletion import autocomplete File "/usr/lib/python3/dist-packages/pip/_internal/cli/autocompletion.py", line 10, 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 8, in <module> from pip._internal.cli import cmdoptions File "/usr/lib/python3/dist-packages/pip/_internal/cli/cmdoptions.py", line 23, in <module> from pip._internal.cli.parser import ConfigOptionParser File "/usr/lib/python3/dist-packages/pip/_internal/cli/parser.py", line 12, in <module> from pip._internal.configuration import Configuration, ConfigurationError File "/usr/lib/python3/dist-packages/pip/_internal/configuration.py", line 26, in <module> from pip._internal.utils.logging import getLogger File "/usr/lib/python3/dist-packages/pip/_internal/utils/logging.py", line 27, in <module> from pip._internal.utils.misc import ensure_dir File "/usr/lib/python3/dist-packages/pip/_internal/utils/misc.py", line 39, in <module> from pip._internal.locations import get_major_minor_version File "/usr/lib/python3/dist-packages/pip/_internal/locations/__init__.py", line 14, in <module> from . import _distutils, _sysconfig File "/usr/lib/python3/dist-packages/pip/_internal/locations/_distutils.py", line 9, in <module> from distutils.cmd import Command as DistutilsCommand ModuleNotFoundError: No module named 'distutils'
所有包安装都会触发该错误,已尝试重新安装Python、用pip升级setuptools、通过apt安装python3.13-distutils和python3.13-setuptools(无对应包),问题仍未解决。
解决方法
方法1:手动安装适配Python3.13的distutils
Ubuntu 22.04官方源未提供Python3.13的distutils包,可通过以下步骤手动补充:
- 安装Python3.13的虚拟环境工具(附带ensurepip):
sudo apt install python3.13-venv - 用ensurepip为Python3.13安装并升级pip:
python3.13 -m ensurepip --upgrade - 通过pip安装setuptools(内置distutils兼容实现):
python3.13 -m pip install --upgrade setuptools
完成后再次执行python3.13 -m pip install即可正常使用。
方法2:使用虚拟环境隔离运行
虚拟环境可完全避免系统级Python的依赖冲突,是更安全的方案:
- 安装虚拟环境工具:
sudo apt install python3.13-venv - 创建并激活虚拟环境:
python3.13 -m venv ~/py313-env source ~/py313-env/bin/activate - 激活后,直接用
pip安装包即可(此时pip自动适配Python3.13):pip install SomePackage
方法3:替换系统全局pip为Python3.13版本(谨慎操作)
若需要全局使用Python3.13的pip,可替换系统默认pip:
- 卸载系统原有的python3-pip:
sudo apt remove python3-pip - 为Python3.13安装并升级pip:
python3.13 -m ensurepip --upgrade - 创建软链接让
pip3指向Python3.13的pip:sudo ln -sf ~/.local/bin/pip3.13 /usr/bin/pip3
注意:此操作会改变系统默认pip关联的Python版本,可能影响依赖Python3.10的系统工具,需谨慎执行。
内容的提问来源于stack exchange,提问作者YasuoTouchedMySpaggett
相关产品推荐
相关产品推荐

