Ошибка ModuleNotFoundError: Нет модуля с именем ‘distutils.util’

Вопрос или проблема

После обновления до Ubuntu 20.04, когда я запускаю:

pip install <некоторый пакет>

или

pip --version

я получаю сообщение:

adam@daryy:~$ pip3

Traceback (most recent call last):
  File "/usr/local/bin/pip3", line 5, in <module>
    from pip._internal.cli.main import main
  File "/usr/local/lib/python3.7/dist-packages/pip/_internal/cli/main.py", line 10, in <module>
    from pip._internal.cli.autocompletion import autocomplete
  File "/usr/local/lib/python3.7/dist-packages/pip/_internal/cli/autocompletion.py", line 9, in <module>
    from pip._internal.cli.main_parser import create_main_parser
  File "/usr/local/lib/python3.7/dist-packages/pip/_internal/cli/main_parser.py", line 7, in <module>
    from pip._internal.cli import cmdoptions
  File "/usr/local/lib/python3.7/dist-packages/pip/_internal/cli/cmdoptions.py", line 19, in <module>
    from distutils.util import strtobool
ModuleNotFoundError: No module named 'distutils.util'
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
    import apport.fileutils
  File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
    from apport.packaging_impl import impl as packaging
  File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 23, in <module>
    import apt
  File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'

Original exception was:
Traceback (most recent call last):
  File "/usr/local/bin/pip3", line 5, in <module>
    from pip._internal.cli.main import main
  File "/usr/local/lib/python3.7/dist-packages/pip/_internal/cli/main.py", line 10, in <module>
    from pip._internal.cli.autocompletion import autocomplete
  File "/usr/local/lib/python3.7/dist-packages/pip/_internal/cli/autocompletion.py", line 9, in <module>
    from pip._internal.cli.main_parser import create_main_parser
  File "/usr/local/lib/python3.7/dist-packages/pip/_internal/cli/main_parser.py", line 7, in <module>
    from pip._internal.cli import cmdoptions
  File "/usr/local/lib/python3.7/dist-packages/pip/_internal/cli/cmdoptions.py", line 19, in <module>
    from distutils.util import strtobool
ModuleNotFoundError: No module named 'distutils.util'

даже когда я просто ввожу pip3 или pip.

У меня возникла эта проблема после обновления до Ubuntu 20.04. У меня была виртуальная среда, зависящая от Python 3.7, и, чтобы избежать переустановки всей виртуальной среды для Python 3.8, я исправил distutils для Python 3.7:

Я добавил PPA deadsnake:

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update

И затем установил пакет distutils для Python 3.7:

sudo apt install python3.7-distutils

Примечание: по какой-то причине у меня была ошибка при установке последнего, которую я решил таким образом:

sudo dpkg -i --force-overwrite /var/cache/apt/archives/python3.7-distutils_3.7.9-1+focal1_all.deb
sudo apt-get -f install 

Ошибка «модуль не найден» скорее всего означает, что пакеты не установлены.

sudo apt-get install python3-distutils

sudo apt-get install python3-apt

Если они уже установлены, вы можете попробовать исправить все, что могло быть испорчено при обновлении, с помощью…

sudo apt-get install --reinstall package-name

Debian решил, что distutils не является основным пакетом Python, поэтому он не включен в последние версии Debian и ОС на его основе. Вы должны быть в состоянии выполнить sudo apt install python3-distutils, и это должно сработать.

Тем не менее, это не сработало для меня. Я использую Parrot OS, которая, как и Ubuntu, основана на Debian. Я обновил свою систему, и pip перестал работать для python3.7, и я также получил ошибку ModuleNotFoundError: No module named 'distutils.util'

Я пробовал многое, чтобы это исправить и переустановить distutils, и мне повезло, что pip3 для python3.8 работал. Затем я попробовал python3.7 -m pip3 -V, получил /usr/bin/python3.7: No module named pip3, поэтому я решил взглянуть на файлы /usr/lib.

Я посмотрел на /usr/lib/python3/dist-packages и все выглядело нормально. Затем я заглянул в /usr/lib/python3.7 и увидел папку distutil.

Я открыл ее и увидел __pycache__, файл __init__.py и файл version.py. Я не имел представления, сколько файлов должно быть там или какой должен быть код, но я знал, что эти два файла либо неверны, либо им не хватает другого файла.

Затем я взглянул на то, что внутри /usr/lib/python3.8/distutil и это было совершенно другим. Я нашел следующие файлы:

command                          Folder
__pycache__                      Folder
archive_util.py                  Python script
bcppcompiler.py                  Python script
cmd.py                           Python script
config.py                        Python script
core.py                          Python script
cygwinccompiler.py               Python script
debug.py                         Python script
dep_util.py                      Python script
errors.py                        Python script
extension.py                     Python script
fancy_getopt.py                  Python script
filelist.py                      Python script
file_util.py                     Python script
__init__.py                      Python script
log.py                           Python script
msvc9compiler.py                 Python script
_msvccompiler.py                 Python script
msvccompiler.py                  Python script
README                           Plain text file
spawn.py                         Python script
sysconfig.py                     Python script
text_file.py                     Python script
unixccompiler.py                 Python script
util.py                          Python script
version.py                       Python script
versionpredicate.py              Python script

Это выглядело гораздо многообещающе, и поскольку pip3 работал, я предположил, что и этот distutils тоже работает, и попробовал скопировать его в папку python3.7, выполнив эту команду:

sudo cp -r /usr/lib/python3.8/distutils /usr/lib/python3.7/distutils

Также:

sudo mv /usr/lib/python3.7/distutils/ /usr/lib/python3.7/distutils_back
sudo ln -s /usr/lib/python3.8/distutils /usr/lib/python3.7/

Затем я снова попробовал python3.7 -m pip -V и получил

pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.7)

После этого я попробовал установить несколько модулей, и все работает нормально.
Надеюсь, это будет полезно.

Я пришел сюда за ответом и не нашел, но исправил это сам.

Некоторое время назад я экспериментировал с версией python, используя update-alternatives, также я полагаю, что редактировал некоторые сценарии вручную, и теперь, после обновления с 16.04 до 20.04, у меня возникла та же проблема, что и у вас. Я не уверен, является ли мое решение “правильным”, но оно сработало для меня:

~$ which pip3
/home/patryk/.local/bin/pip3
~$ vim /home/patryk/.local/bin/pip3

Я изменил первую строку с:

#!/usr/bin/python3.7

на:

#!/usr/bin/python3

Помогло в моем случае.

Убедитесь, что вы установили соответствующую версию в зависимости от версии python, например, для получения всех доступных версий (предполагая использование apt пакетного менеджера):

$ apt-cache search distutils
python-setuptools - Улучшения Distutils для Python
python-setuptools-doc - Улучшения Distutils для Python (документация)
python3-d2to1 - Поддержка Python3 для метаданных пакета, подобного setup.cfg, в distutils2
python3-setuptools - Улучшения Distutils для Python3
pypy-setuptools - Улучшения Distutils для PyPy
python-d2to1 - Поддержка Python для метаданных пакета, подобного setup.cfg, в distutils2
python-distlib - низкоуровневые компоненты python distutils2/packaging
python-distutils-extra - улучшения для системы сборки Python
python-stsci.distutils - Утилиты упаковки Python для пакетов STScI
python3-distlib - низкоуровневые компоненты python distutils2/packaging
python3-distutils-extra - улучшения для системы сборки Python3
python3-stdeb - Плагины для преобразования пакетов источников Python в Debian для distutils
python3-stsci.distutils - Утилиты упаковки Python3 для пакетов STScI
python3.7-distutils - пакет distutils для Python (версия 3.7)
python3.8-distutils - пакет distutils для Python (версия 3.8)
python3.9-distutils - пакет distutils для Python (версия 3.9)

Вы можете увидеть python3.7-distutils, python3.8-distutils и python3.9-distutils, перечисленные в выходных данных выше, и затем можете установить его, указав версию, связанную с желаемой версией python, например, у меня python3.8, и я хочу сделать:

$ sudo apt-get install python3.8-distutils

Затем я бы запустил pip с этой версией python (Убедитесь, что сначала выполните echo $PYTHONPATH, чтобы подтвердить версию python3.8 (мою версию python) в пути, в противном случае pip установит ее в неправильный путь), например:

$ python3.8 -m pip install requests

После установки Python3.10 в Ubuntu с использованием ppa:deadsnakes/ppa, я исправил эту ошибку, выполнив sudo apt install python3.10-distutils.

Я установил альтернативные версии Python из PPA deadsnakes. Мне пришлось установить версии distutils для всех альтернативных версий в форме python3.x-distutils. Поэтому для python 3.9 я выполнил sudo apt install python3.9-distutils.

Я столкнулся с этой проблемой, когда обновил свою систему с Python 3.9 до Python 3.10, но мой терминал (внутри Pycharm) автоматически загружал venv из Python 3.9 – ссылаясь на устаревшие/недостающие пакеты, поскольку процесс обновления установил версии этих пакетов для 3.10.

Переоснащение моего venv решило проблему:

rm -r venv
python3 -m venv venv
source ./venv/bin/activate
pip3 install -r requirements.txt

Пакет distutils удален в python version 3.12

Он был объявлен устаревшим в Python 3.10 согласно PEP 632 «Объявить модуль distutils устаревшим». Для проектов, которые все еще используют distutils и не могут быть обновлены до чего-то другого, проект setuptools можно установить: он все еще предоставляет distutils.

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

Да, вам нужно выполнить

pip install setuptools

в свежей виртуальной среде.

Простой ответ-

sudo apt-get install python3-distutils

Теперь, если у вас установлены разные версии python, то для конкретной версии, для которой вы получаете эту ошибку (например, python3.8), используйте-

sudo apt-get install python3.8-distutils

Общий ответ-

sudo apt-get install python<version>-distutils

У меня была аналогичная проблема с пакетами из ppa:deadsnakes/ppa на Ubuntu 20.04, и я решил ее, установив python3.10-full. Полные инструкции:

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.10-full

Получил то же самое после обновления с 20.04 до 22.04

22.04 поставляется с python3.10.
И после обновления python3.9 все еще существует наряду с версией 3.10, но не имеет distutils, поэтому pip не работает с python3.9 (что плохо, потому что вы не можете удалить что-либо, установленное ранее с python3.9).

Так что используйте: python3.10 -m pip install
это работает.

И вы можете сделать так, чтобы pip использовал python3.10 по умолчанию вот так:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.10 4

ModuleNotFoundError: No module named ‘distutils.cmd’

У меня возникла вышеупомянутая ошибка.. Это можно решить с помощью следующей команды

sudo apt-get install python3.8-distutils

Не знаю, поможет ли это, но я пытался установить пакет с помощью:

$ pip3 install <пакет>

И это выдало ту же ошибку, однако, когда я использовал sudo:

$ sudo pip3 install <пакет>

это прошло успешно. Я только могу предположить, что dist-utils установлены только для пользователя root.

У меня были те же проблемы, что и у остальных, после обновления до последней версии всех пакетов.

В моем случае сработало заменить старый бинарный файл python на более новый:

sudo unlink /usr/bin/python
sudo ln -s /usr/bin/python3.8 /usr/bin/python

Больше ничего не требуется, кроме этих двух строк. Не уверен, как это воспринимает ubuntu, но это просто переключение обратно, когда теперь я могу установить нужный пакет.

У меня возникла эта проблема с Python 3.8 – Ubuntu 18.04 при запуске python3.8 -m venv blcorp:

ModuleNotFoundError: No module named ‘distutils.util’

Исправление было похоже на ответ Чиро (https://askubuntu.com/a/1260519/1608427):

У меня была версия distutils 3.7, я скопировал ее в пакет distutils для python3.8, и больше не было ошибок.

sudo cp -r /usr/lib/python3.7/distutils /usr/lib/python3.8/

У меня была та же проблема, пытаясь установить пакет pandas через IDE PyCharm в Ubuntu 22.04. Я решил проблему, изменив интерпретатор в НастройкиПроектPython интерпретатор на conda.

Для установки conda просто следуйте инструкциям на сайте Anaconda. На самом деле, вам просто нужно скачать сценарий оболочки, затем использовать chmod +x FILENAME.sh, затем запустить исполняемый файл с ./FILENAME.sh. Добавьте интерпретатор в PyCharm, выбрав путь к исполняемому файлу.

Надеюсь, это поможет кому-то.

В моем случае я переключился с python3.6 на python3.9, и это сработало.

Мне нужно было выполнить sudo apt install python3.10-venv.

$ python3 -m venv venv1
Виртуальная среда не была создана успешно, потому что ensurepip не
доступен.  На системах Debian/Ubuntu вам нужно установить пакет python3-venv
с помощью следующей команды.

    apt install python3.10-venv

Вам может потребоваться использовать sudo с этой командой.  После установки пакета python3-venv
воссоздайте вашу виртуальную среду.

Ошибка выполнения: /home/mono/Sachen/CodeLibrary/Python/2024October5/XOrithm Take Home Assignment/venv1/bin/python3

$ sudo apt install python3.10-venv

Ответ или решение

Ошибка ModuleNotFoundError: No module named 'distutils.util' возникает, когда вы пытаетесь использовать pip на Ubuntu 20.04 или выше и не установлены необходимые пакеты. Это связано с тем, что в последних версиях Ubuntu пакет distutils был исключен из стандартной установки Python.

Вот пошаговое руководство по решению этой проблемы:

1. Установите необходимые пакеты

Вам нужно установить пакет python3-distutils, чтобы pip работал корректно. Чтобы сделать это, откройте терминал и выполните следующие команды:

sudo apt-get update
sudo apt-get install python3-distutils

Если вы используете определенную версию Python, например Python 3.8 или 3.9, выполните:

sudo apt-get install python3.8-distutils

или

sudo apt-get install python3.9-distutils

2. Установите пакет apt (если требуется)

Иногда для корректной работы pip вам может понадобиться пакет python3-apt. Установите его, используя:

sudo apt-get install python3-apt

3. Убедитесь в наличии pip

Проверьте, установлен ли pip для выбранной версии Python, с помощью команды:

python3 -m pip --version

Если pip не установлен, вы можете установить его:

sudo apt-get install python3-pip

4. Используйте виртуальное окружение

Рекомендуется использовать виртуальное окружение для вашего проекта, чтобы избежать конфликтов между пакетами. Создайте и активируйте виртуальное окружение:

python3 -m venv myenv
source myenv/bin/activate

Еще раз установите необходимые пакеты, такие как pip, в пределах этого виртуального окружения.

5. Установите setuptools

Если проблема все ещё не решена, попробуйте установить setuptools в вашем виртуальном окружении:

pip install setuptools

6. Устранение других возможных проблем

Если вы перемещались между версиями Python или пользовались сторонними репозиториями (как deadsnakes), чтобы установить несколько версий Python, проверьте свои ссылки и настройки:

  • Убедитесь, что вы используете корректные символические ссылки для Python:
    sudo update-alternatives --config python3
  • Также проверьте первые строки скриптов pip, чтобы убедиться, что они ссылаются на корректную версию Python.

7. В заключение

Если вы все выполнили правильно, pip должен работать без ошибок. Если проблема остается, проверьте, что у вас нет конфликтов между различными установленными версиями Python, или попробуйте переустановить Python и pip полностью.

Оцените материал
Добавить комментарий

Капча загружается...