Ошибка Python - «ImportError: невозможно импортировать имя 'dist'»

Я использую Ubuntu 16.04 и получаю:

Traceback (most recent call last):
  File "/home/omermazig/.virtualenvs/fixi/bin/pip", line 7, in <module>
    from pip import main
  File "/home/omermazig/.virtualenvs/fixi/lib/python3.6/site-packages/pip/__init__.py", line 26, in <module>
    from pip.utils import get_installed_distributions, get_prog
  File "/home/omermazig/.virtualenvs/fixi/lib/python3.6/site-packages/pip/utils/__init__.py", line 23, in <module>
    from pip.locations import (
  File "/home/omermazig/.virtualenvs/fixi/lib/python3.6/site-packages/pip/locations.py", line 9, in <module>
    from distutils import sysconfig
  File "/home/omermazig/.virtualenvs/fixi/lib/python3.6/distutils/__init__.py", line 25, in <module>
    from distutils import dist, sysconfig
ImportError: cannot import name 'dist'

Когда я запускаю что-нибудь с помощью python. Это специально для попытки запустить «замораживание пипса». Что делать?

sudo apt-get install python3-distutils

Girish Gupta 09.05.2018 12:19

sudo apt-get сработало для меня! Благодарность

vatsalay 09.09.2020 07:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
33
2
24 930
6

Ответы 6

Возьмите добычу по этой (аналогичная проблема): https://github.com/pypa/pip/issues/5367

Возможное исправление:

  • Загрузите исходный код Python из https://www.python.org/
  • Распаковать исходный код
  • Установите следующие зависимости:

    sudo apt-get install zlib1g-dev (необходимо для компиляции Python)

  • и установите:

sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev (требуется Пипу для выполнения SSL-запросов)

  • Скомпилируйте и установите Python:

/ настроить

делать

сделать установку

  • Должен быть установлен Python 3.6 с Pip.

Полная заслуга jonbesga.

Компилировать что-то из исходников в Ubuntu не идеально, что касается обновлений и интеграции дистрибутива.

Herbert 26.06.2020 17:01

попытайся

sudo apt install python3-distutils

он исправил ошибку ImportError для меня (Ubuntu 16.04 внутри virtualenv с python3.6).

jfs 14.05.2018 10:56

в virtualenv нет такой вещи, как Ubuntu. Вы должны иметь в виду virtualenv с python3.6, работающим на Ubuntu 16.04

cryanbhu 15.07.2018 09:50

"python3-distutils - это уже самая новая версия (3.7.3-1ubuntu1)" не решила проблему (что происходит в virtualenv, а не в системном питоне)

Gringo Suave 21.05.2019 22:05

Поскольку я сталкиваюсь с этой проблемой каждый раз, когда обновляю свою версию ubuntu каждые шесть месяцев, а затем натыкаюсь на тот же результат SO, вот мое решение.

Если другие перечисленные здесь решения не работают (установка python3-distutils), это может быть связано с разными версиями python между системой и virtualenv.

Простое решение - уничтожить ваш virtualenv, а затем воссоздать его с нуля.

Сработало у меня! Также пришлось изменить версию python в разделе [requires] моего Pipfile.

Nero Vanbiervliet 27.05.2020 09:06

Мой случай был, когда я обновил Ubuntu 18 -> 19. Итак, он переустановил python, и мне нужно было сделать следующее:

  1. удалить старую виртуальную среду

  2. создать новый

  3. установить в него требования через pip

да, я только что обновился с 19.10 до 20.04, и то же самое случилось со мной.

Comm4nd0 10.05.2020 17:41

@ Comm4nd0 То же и здесь. Но также не смог создать файл requirements.txt из старого! Это нужно сделать до обновления Ubuntu!

smcs 08.09.2020 14:03

Я столкнулся с этой проблемой после установки Python 3.8 на Ubuntu (у меня версия 16.04)

$ lsb_release -d
Description:     Ubuntu 16.04.6 LTS
  1. Воспроизвести ошибку

Просто попробуйте импортировать distutils

$ python3 -c "from distutils import sysconfig"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: cannot import name 'sysconfig' from 'distutils' (/usr/lib/python3.8/distutils/__init__.py)

$ sudo apt install python3-distutils          
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package python3-distutils

Не удается найти пакет python3-distutils

$ sudo apt install python3-distutils          
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package python3-distutils
  1. список доступных distutils

Что помогло, так это перечисление всех пакетов distutil с использованием регулярного выражения

$ apt list *distutils*
Listing... Done
python-distutils-extra/xenial,xenial 2.39-1 all
python-stsci.distutils/xenial,xenial 0.3.7-4 all
python3-distutils-extra/xenial,xenial 2.39-1 all
python3-stsci.distutils/xenial,xenial 0.3.7-4 all
python3.7-distutils/xenial,xenial 3.7.8-1+xenial1 all
python3.8-distutils/xenial,xenial 3.8.3-1+xenial1 all
python3.9-distutils/xenial,xenial 3.9.0~b4-1+xenial1 all
  1. Установите правильный пакет distutils

Для своего Python 3.8 я выбрал python3.8-distutils, и он сработал.

$ sudo apt-get install -y python3.8-distutils

Но если python-3.7 останется установленным в системе, он все равно будет поврежден и не сможет импортировать отсутствующий файл distutils/dist.py :-(

ankostis 26.08.2020 11:29

$ sudo apt-get install -y python3.8-distutils сработал.

m9m9m 04.11.2020 07:25

Решено: у меня только что возникла эта проблема в виртуальной среде, установленной 2 года назад, с использованием python3.7.

Запустив pip3 или python3.7 -c "from distutils import dist, sysconfig" из venv, я получил ошибку ImportError: невозможно импортировать имя 'dist'

При использовании системного Python 3.9 эта ошибка исчезает.

Я решил скопировать /usr/lib/python3.9/distutils в виртуальную среду python3.7.

Другие вопросы по теме