Вопрос или проблема
После обновления до 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 полностью.