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

guru@guru-notebook:~$ pip3 install numpy
Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in 
    from pip import main
ImportError: cannot import name 'main'


guru@guru-notebook:~$ cat `which pip3`
#!/usr/bin/python3
# GENERATED BY DEBIAN

import sys

# Run the main entry point, similarly to how setuptools does it, but because
# we didn't install the actual entry point from setup.py, don't use the
# pkg_resources API.
from pip import main
if __name__ == '__main__':
    sys.exit(main())

Раньше он работал нормально, я не уверен, почему он выдает эту ошибку. Я искал информацию об этой ошибке, но не нашел ничего, чтобы ее исправить.

Пожалуйста, дайте мне знать, если вам понадобится дополнительная информация, я обновлю свой вопрос.

g_p

Ответов: 32

Ответы (32)

Вы, должно быть, случайно обновили системный пип (возможно, с помощью чего-то вроде sudo pip install pip --upgrade)

pip 10.x регулирует расположение его внутренних компонентов. Команда pip3, которую вы видите, предоставлена ​​сопровождающим вашего пакета (предположительно, на основе debian?), И не является файлом, управляемым pip.

Вы можете узнать больше об этом в системе отслеживания проблем pip

Вы, вероятно, захотите не обновить системный пип, а вместо этого использовать virtualenv.

Чтобы восстановить двоичный файл pip3, вам потребуется sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall.

Если вы хотите продолжить работу на «неподдерживаемой территории» (обновление системного пакета за пределами системного менеджера пакетов), вы, вероятно, можете обойтись с помощью python3 -m pip ... вместо pip3.

Для Python версии 2.7 решение @Anthony работает идеально, изменив python3 на python следующим образом:

sudo python -m pip uninstall pip && sudo apt install python-pip --reinstall

У меня была такая же ошибка, но python -m pip все еще работал, поэтому я исправил ее с помощью ядерной опции sudo python -m pip install --upgrade pip. Это помогло мне.

В ubuntu 18.04.1 Bionic Beaver вам необходимо выйти и снова войти в систему (перезапуск не требуется), чтобы получить правильную среду.

$ sudo apt install python-pip

$ pip --version
pip 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip install --upgrade pip

$ pip --version
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in 
    from pip import main
ImportError: cannot import name main

$ exit


$ pip --version
pip 18.1 from /home/test/.local/lib/python2.7/site-packages/pip (python 2.7)

Я использовал следующий код для загрузки модуля, который может нуждаться в установке, чтобы избежать этой ошибки (которую я тоже получил) - без проблем используя последнюю версию Python и последнюю версию pip

try
  from colorama import Fore, Back, Style
except:
  !pip install colorama
  from colorama import Fore, Back, Style

В Debian вам нужно сначала обновить apt ....

sudo apt-get update -qq
sudo apt-get install python-pip -qq
sudo pip install pip --upgrade --quiet
sudo pip2 install virtualenv --quiet

Если вы пропустите sudo apt-get update -qq, ваш пип станет поврежденным и отобразит ошибку «не удается найти основную».

импортировать основную часть из pip._internal

from pip._internal import main

Измените пип-код с

sudo nano /usr/bin/pip3

Как бы то ни было, у меня была проблема с pip (не pip2 или pip3):

$ pip -V
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in 
    from pip import main
ImportError: cannot import name main

$ pip2 -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip3 -V
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)

Каким-то образом (не помню, как) у меня был установлен питон в моем каталоге ~ / .local. После того, как я удалил оттуда каталог pip, pip снова начал работать.

$ rm -rf /home/precor/.local/lib/python2.7/site-packages/pip
$ pip -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

Проверьте, был ли кэширован pip по другому пути, для этого вызовите $ which pip и убедитесь, что путь отличается от пути, указанного в сообщении об ошибке, в этом случае запустите:

$ hash -r

Когда кеш очистится, pip снова будет работать. ссылка: http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file-or-directory

Как сказал @cryptoboy - проверьте, какую версию pip / python вы установили

 demon@UbuntuHP:~$ pip -V
 demon@UbuntuHP:~$ pip2 -V
 demon@UbuntuHP:~$ pip3 -V

, а затем проверьте наличие ненужных библиотек в папке .local / lib /.

Я сделал резервную копию настроек, когда переходил на новую версию Kubuntu, и в моем домашнем каталоге была папка .local / lib / python2.7 /. Установлен python 3.6. Я просто удалил старую папку и теперь все отлично работает!

То же самое случилось со мной на Pixelbook, использующем новый LXC (strech). Это решение очень похоже на принятое, с одной небольшой разницей, для меня это фиксированный pip3.

sudo python3 -m pip install --upgrade pip

Это подтолкнуло версию, и теперь она работает как положено.

Я нашел его здесь ... Python.org: Убедитесь, что pip обновлен

Что-то не так с пакетами, когда он генерирует файл / usr / bin / pip, вам нужно изменить импорт:

from pip import main
От

до

from pip._internal import main

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

После обновления pip 10 на pyenv «ImportError: невозможно импортировать имя 'main'»

Это сработало для меня!

hash -r pip # or hash -d pip

Теперь удалите установленную версию pip и переустановите ее, используя следующие команды.

python -m pip uninstall pip  # sudo
sudo apt install --reinstall python-pip

Если пункт не работает, используйте:

python -m pip install --force-reinstall pip

Надеюсь, это поможет!

Прикол и тоже работает

sudo -H pip install lxml

разрешается только за один шаг.

• 100001 И это:

Для python3: - sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall.

Таким образом, вы можете просто устанавливать пакеты, используя pip3. для проверки используйте pip3 --version.

Для более старых версий используйте: sudo python -m pip uninstall pip && sudo apt install python-pip --reinstall.

Таким образом, теперь вы можете просто устанавливать пакеты, используя pip. для проверки используйте pip --version.

Приведенные выше команды не работали для меня, но они были очень полезны:

sudo apt purge python3-pip
sudo rm -rf '/usr/lib/python3/dist-packages/pip'  
sudo apt install python3-pip
cd
cd .local/lib/python3/site-packages
sudo rm -rf pip*  
cd
cd .local/lib/python3.5/site-packages
sudo rm -rf pip*  
sudo pip3 install jupyter

Восстановление с помощью python3 -m pip install --user pip == 9.0.1 (или той версии, которая работала)

Я столкнулся с той же проблемой в своей системе Ubuntu 16.04. Мне удалось исправить это, переустановив pip с помощью следующей команды:

curl https://bootstrap.pypa.io/get-pip.py | sudo python3

Что помогло мне исправить ошибку с использованием pip3 было:

sudo cp -v / usr / local / bin / pip3 / usr / bin / pip3

Все работает:

 demon@UbuntuHP:~$ pip -V
 pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

 demon@UbuntuHP:~$ pip2 -V
 pip 10.0.1 from /home/demon/.local/lib/python2.7/site-packages/pip (python 2.7)

 demon@UbuntuHP:~$ pip3 -V
 pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

Может быть, новая версия 10.0.1 pip не обновляет двоичный файл в / usr / bin? (что, кажется, не так)

РЕДАКТИРОВАТЬ: такая же проблема возникает в Ubuntu 18.04. Лучшее решение, которое я нашел, - это символическая ссылка на двоичные файлы pip от / home / до / usr / local / bin или / usr / bin (в зависимости от ваших предпочтений), а именно:

ln -sv /home//.local/bin/pip / usr / local / bin / pip
ln -sv /home/<пользователь>/.local/bin/pip2 / usr / local / bin / pip2
ln -sv /home//.local/bin/pip2.7 /usr/local/bin/pip2.7
ln -sv /home//.local/bin/pip3 / usr / local / bin / pip3
ln -sv /home/<пользователь>/.local/bin/pip3.6 /usr/local/bin/pip3.6

ПРИМЕЧАНИЕ: замените текущим пользователем

Соответствующие версии (последние) находятся в:

Версия 3.6:

/ home / demon / .local / lib / python3.6 / site-packages / pip (python 3.6)

Версия 2.7:

/ home / demon / .local / lib / python2.7 / site-packages / pip (python 2.7)

Для пользователей семейства Ubuntu, Debian, Linux Mint

Благодаря объяснению Энтони выше, вы можете сохранить исходный системный пип (в / usr / bin / и dist-packages /) и удалить установленный вручную пип (в ~ / .local /) для разрешения конфликта:

$ python3 -m pip uninstall pip

Ubuntu / Debian pip v8.1.1 (16.04) из python3-pip пакет debian (см.$ pip3 -V) показывает те же результаты поиска, что и последний pip v10.0.1 , и без проблем устанавливает последние модули из PyPI. Он имеет рабочую команду pip (уже в $ PATH), а также приятную опцию - user, исправленную по умолчанию с 2016 года. Глядя на примечания к выпуску pip, новые версии в основном посвящены исправлениям ошибок для конкретных вариантов использования и определенным новым функциям, поэтому не всем пока нужно спешить с обновлением pip. И новый pip 10 в любом случае можно развернуть на Python virtualenvs.

Но независимо от количества пипсов, ваша ОС позволяет быстро устанавливать общие модули Python (включая numpy) с APT без необходимости в пипсах, например:
$ sudo apt install python3-numpy python3-scipy (с системными зависимостями)
$ sudo apt install python3-pip (pip с исправлением Debian, немного старше, но это не имеет значения)

Быстрое напоминание о синтаксисе apt (подробнее см. man apt):
$ sudo apt update (для повторной синхронизации индексных файлов пакета Ubuntu из актуальных источников)
$ apt search (полнотекстовый поиск по всем доступным пакетам)
$ apt show (отображает подробное описание пакета)
$ sudo apt install <имя-пакета-python>

Имена пакетов с префиксом python- предназначены для Python 2; и с префиксом python3- предназначены для Python 3 (например, python3-pandas). Их тысячи, и они проходят интеграционное тестирование в Debian и Ubuntu. Если вы не стремитесь установить на уровне пользователя (опцияpip install --user) или внутри virtualenv / venv, apt может быть тем, что вам нужно. Эти системные пакеты также доступны из виртуальных envs, так как virtualenv корректно вернется к использованию системных библиотек при импорте, если ваши env не предоставили копии модулей. Ваши индивидуально установленные (с pip - user) модули для каждого пользователя в ~ / .local / lib также переопределят их.

Обратите внимание: поскольку это общесистемная установка, вам редко придется удалять их (необходимо помнить о зависимостях ОС). Это удобно для пакетов со многими системными зависимостями (например, с scipy или matplotlib), поскольку APT будет отслеживать и предоставлять все необходимые системные библиотеки и расширения C, а с pip у вас таких гарантий нет.

Фактически, для общесистемных пакетов Python (в отличие от отдельных пользователей, уровня домашнего каталога или ниже) Ubuntu ожидает с использованием диспетчера пакетов APT (вместо sudo pip), чтобы избежать поломки ОС: sudo pip3 нацелен на тот же каталог / usr / lib / python3 / dist-packages, в котором APT хранит чувствительные к ОС модули. Последние выпуски Debian / Ubuntu сильно зависят от Python 3, поэтому его предустановленные модули управляются apt и не должны изменяться.

Поэтому, если вы используете команду pip3 install, убедитесь, что она работает в изолированной виртуальной среде разработчика, например, с virtualenv (sudo apt install python3-virtualenv), или со встроенным Python3 (-m venv), или на уровне пользователя (- user опция pip, по умолчанию в pip, предоставляемом Ubuntu, с 2016 г. ), но не в масштабе всей системы (никогда sudo pip3!), потому что pip мешает работе диспетчера пакетов APT и может повлиять на ОС Ubuntu компоненты при неожиданном изменении системного модуля Python. Удачи!


P. S. Все вышеперечисленное относится к «идеальному» решению (способ Debian / Ubuntu).

Если вы по-прежнему хотите использовать только новый pip3 v10, есть 3 быстрых обходных пути:

  • просто откройте новый сеанс bash (новую вкладку терминала или введите bash) - и pip3 v10 станет доступным (см. pip3 -V). debian pip3 v8 остается установленным, но не работает; или
  • команда $ hash -d pip3 && pip3 -V для обновления имени пути pip3 в $ PATH. debian pip3 v8 остается установленным, но не работает; или
  • команда $ sudo apt remove python3-pip && hash -d pip3 для полного удаления debian pip3 v8 в пользу вашего нового pip3 v10.

Примечание: Вам всегда нужно будет добавлять флаг - user к любому пипу, не предоставленному debian, если только вы не находитесь в virtualenv! (он развертывает пакеты python в ~ / .local /, по умолчанию в python3-pip и python-pip, предоставляемых debian / ubuntu, с 2016 года). Использование вами pip 10 в масштабе всей системы, за пределами virtualenv, на самом деле не поддерживается Ubuntu / Debian. Никогда sudo pip3!

Подробности:
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-381673100

Вы можете решить эту проблему, переустановив pip.

Используйте одну из следующих команд командной строки для переустановки pip:

Python2:

python -m pip uninstall pip && sudo apt install python-pip --reinstall

Python3:

 python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall

Я работаю в системе, в которой есть sudo apt, но нет sudo pip. (И без доступа su.) Я попал в такую ​​же ситуацию, следуя совету pip:

Вы используете версию 8.1.1 pip, но доступна версия 18.0. Вам следует рассмотреть возможность обновления с помощью команды pip install --upgrade pip.

Ни одно из других исправлений у меня не помогло, потому что у меня недостаточно прав администратора. Однако, прочитав это, я кое-что запомнил:

  • Я не должен был этого делать. Конечно, Пип сказал мне. Он солгал.
  • Использование --user решает множество проблем, фокусируясь на пользовательском каталоге.

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

python -m pip install --force-reinstall pip==8.1.1 --user

Это единственное, что у меня сработало, но сработало отлично!

Используйте python -m pip install вместо pip install

Пример:

python -m pip install --user somepackage
python3 -m pip install --user somepackage

Исполняемый файл pip (соответственно pip3) предоставляется вашим дистрибутивом (пакетpython-pip в Ubuntu 16.04) и расположен по адресу / usr / bin / pip.

Следовательно, он не обновляется вместе с самим пакетом pip при обновлении pip и может сломаться.

Если вы просто используете python -m pip напрямую, например как в:

python -m pip install --user somepackage
python3 -m pip install --user somepackage

он перебирает ваш путь к Python, находит последнюю версию pip и запускает этот файл.

Он основан на том факте, что файл можно выполнить через import, но это очень стандартный тип интерфейса, и поэтому вероятность его поломки меньше, чем у более хакерского сценария Debian.

Тогда я рекомендую добавить следующие псевдонимы к вашему .bashrc:

pip() ( python -m pip "$@" )
pip3() ( python3 -m pip "$@" )

Файл Ubuntu 18.04 / usr / bin / pip3 выполняет:

from pip import main

и, предположительно, main был удален из pip в какой-то момент, что и сломало вещи.

Прерывание фиксации пипа выглядит следующим образом: 95bcf8c5f6394298035a7332c441868f3b0169f4 «Перенести все внутренние API в pip._internal», который вошел в pip 18.0.

Протестировано в Ubuntu 16.04 после обновления с pip3 9.0.1 до 18.0.

pyenv

В конечном итоге, для серьезной разработки Python я бы просто рекомендовал вам установить свой собственный локальный Python с pyenv + virtualenv, что также позволило бы обойти эту ошибку Ubuntu: https://askubuntu.com/questions/682869/how-do-i-install-a-different-python-version-using-apt-get/1195153#1195153

Эта ошибка может быть разрешительной. Итак, протестируйте выполнение команды с флагом -H:

sudo -H pip3 install numpy

Вы можете попробовать это:

sudo ln -sf $( type -P pip ) /usr/bin/pip

Используйте следующую команду перед выполнением любой команды pip

hash -d pip

Будет работать

Please run the following commands to do the fix. After running python3 -m pip install --upgrade pip, please run the following command.

hash -r pip

Источник: https://github.com/pypa/pip/issues/5221

Я также сталкивался с этой проблемой, когда хотел обновить систему pip pip3 с 9.0.1 до 19.2.3.

После запуска pip3 install --upgrade pip, pip версия становится 19.2.3. Но main () был перемещен в pip._internal в последней версии, в результате чего pip3 не работает.

Таким образом, в файле / usr / bin / pip3замените строку 9: из основного импорта pip на из pip._internal import main. Проблема будет исправлена, работает так же для python2-pip. (Проверено на дистрибутиве Ubuntu 18.04)

Согласно @Vincent H.'s ответ

вы можете просто исправить пути pip и pip3, используя update-alternatives

первое, что вы должны проверить, это ваш текущий $ PATH запустите echo $ PATH и посмотрите, можете ли вы найти / usr / local / bin, где pip3 и pip обычно равны

здесь есть изменение, которое ваша система ищет / bin / pip и / bin / pip3 поэтому я скажу исправить ПУТЬ, добавив в ваш файл ~ / .bash_profile, чтобы он сохранялся

экспорт ПУТЬ = $ ПУТЬ: / usr / local / bin а затем проверьте, что он исправлен с помощью , который pip и , который pip3

в противном случае используйте альтернативы обновления, чтобы окончательно исправить это

update-alternatives --install /bin/pip3 pip3 /usr/local/bin/pip3 30

и если вы хотите указать pip на pip3, тогда

update-alternatives --install /bin/pip pip /usr/local/bin/pip3 30

У меня такая же проблема и решил. Вот мое решение. Во-первых, когда я запускаю pip install something, ошибка возникает примерно так:

Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in 
    from pip import main
ImportError: cannot import name 'main'

Итак, я cd в файл / usr / bin / и cat pip3, чтобы увидеть код в нем. Я вижу в нем вот это:

#!/usr/bin/python3
# GENERATED BY DEBIAN
import sys
# Run the main entry point, similarly to how setuptools does it, but because
# we didn't install the actual entry point from setup.py, don't use the
# pkg_resources API.
from pip import main
if __name__ == '__main__':
    sys.exit(main())

А то думаю, что в пути установки его не было. Итак, я вставил в python3-pip, вот так:

cd /.local/lib/python3.5/site-packages/pip

P.S .: вам нужно cd в нужных направлениях на вашем компьютере Затем я cat файл, чтобы увидеть различия (вы можете использовать другие операции, чтобы увидеть код):

cat __main__.py

И я увидел это:

from __future__ import absolute_import
import os
import sys
# If we are running from a wheel, add the wheel to sys.path
# This allows the usage python pip-*.whl/pip install pip-*.whl
if __package__ == '':
    # __file__ is pip-*.whl/pip/__main__.py
    # first dirname call strips of '/__main__.py', second strips off '/pip'
    # Resulting path is the name of the wheel itself
    # Add that to sys.path so we can import pip
    path = os.path.dirname(os.path.dirname(__file__))
    sys.path.insert(0, path)

from pip._internal import main as _main  # isort:skip # noqa

if __name__ == '__main__':
    sys.exit(_main())

Итак, вы видите разницу? Я могу понять, что мне нужно сделать файл таким же, как файл в / usr / bin / pip3

Итак, я скопировал код в /.local/lib/python3.5/site-packages/pip, чтобы заменить код в / usr / bin / pip3 и проблема исчезнет!

P.S .: pip3 или pip не имеют разницы в этой проблеме. Буду рад, если мое решение решит вашу проблему!

Я использую sudo apt remove python3-pip, тогда работает pip.

 ~ sudo pip install pip --upgrade
[sudo] password for sen: 
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in 
    from pip import main
ImportError: cannot import name 'main'
➜  ~ sudo apt remove python3-pip   
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libexpat1-dev libpython3-dev libpython3.5-dev python-pip-whl python3-dev python3-wheel
  python3.5-dev
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
  python3-pip
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 569 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 215769 files and directories currently installed.)
Removing python3-pip (8.1.1-2ubuntu0.4) ...
Processing triggers for man-db (2.7.5-1) ...
➜  ~ pip

Usage:   
  pip  [options]

Мы можем исправить ошибку, изменив файл pip.

Проверить расположение файла:

$ which pip

путь -> / usr / bin / pip

Перейдите в это место (/ usr / bin / pip) и откройте терминал

Введите: $ sudo nano pip

You can see:

import sys
from pip import main
if __name__ == '__main__':
     sys.exit(main())

Изменить на:

import sys
from pip import __main__
if __name__ == '__main__':
     sys.exit(__main__._main())

затем ctrl + o записать изменения и выйти

Надеюсь, так и будет !!

2022 WebDevInsider