it-swarm.com.ru

Ошибка после обновления пипа: невозможно импортировать имя 'main'

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

[email protected]:~$ pip3 install numpy
Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in <module>
    from pip import main
ImportError: cannot import name 'main'


[email protected]:~$ 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 __== '__main__':
    sys.exit(main())

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

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

232
g_p

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

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

Вы можете прочитать больше об этом на трекер проблем pip

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

Для восстановления двоичного файла pip3 вам понадобится Sudo python3 -m pip uninstall pip && Sudo apt install python3-pip --reinstall.

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

494
Anthony Sottile

Для семейства Ubuntu, Debian, Linux Mint

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

$ python3 -m pip uninstall pip 

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

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

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

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

Обратите внимание, поскольку это установка system-wide , вам редко придется их удалять (нужно помнить о зависимостях ОС). Это удобно для пакетов со многими системными зависимостями (например, с 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 года), но not для всей системы (никогда Sudo pip3!), потому что pip мешает работе пакета APT менеджер и может повлиять на Ubuntu OS компоненты , когда системный модуль 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

47
Alex

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

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

$ which pip

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

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

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

Ты можешь видеть:

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

Правка на:

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

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

Надеюсь, что это будет делать!

43
vijay athithya

решено только в один шаг.

Я тоже сталкивался с этой проблемой, но это можно решить с помощью одной команды, не беспокоясь об этом и не теряя времени, и я пробовал его на нескольких системах, это самое чистое решение для этой проблемы. И это:

Для 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.

27
Saket

Используйте 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 "[email protected]" )
pip3() ( python3 -m pip "[email protected]" )

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

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

$ hash -r

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

13
Sr.PEDRO

Я работаю в системе, где у меня есть судо, но нет судо пипа. (И нет доступа.) Я попал в ту же ситуацию, следуя совету из пипа: 

Вы используете версию 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

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

7
Scott Mermelstein

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

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

Для python2:

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

Для python2:

 python3 -m pip uninstall pip && Sudo apt install python3-pip --reinstall
5
Codemaker

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

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
3
Pierrot

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

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

2
jkjung13

Я использую 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 <module>
    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 <command> [options]
2
jim gabriel

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

Sudo python3 -m pip install --upgrade pip

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

Я нашел это здесь ... Python.org: Убедитесь, что пип актуален

2
fliptopbox

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

2
Claire

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

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

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

 [email protected]:~$ pip -V
 pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

 [email protected]:~$ pip2 -V
 pip 10.0.1 from /home/demon/.local/lib/python2.7/site-packages/pip (python 2.7)

 [email protected]:~$ pip3 -V
 pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

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

1
cryptoboy

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

Sudo python -m pip uninstall pip && Sudo apt install python-pip --reinstall
1
ewalel

Трюк и работает тоже

Sudo -H pip install lxml

1
Tejas Tank

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

0
Sergiu

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

Sudo -H pip3 install numpy
0
Mohsen Abasi

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

 [email protected]:~$ pip -V
 [email protected]:~$ pip2 -V
 [email protected]:~$ pip3 -V

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

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

0
Vergil333

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

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

Итак, я захожу в файл/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 __== '__main__':
    sys.exit(main())

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

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

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

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 __== '__main__':
    sys.exit(_main())

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

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

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

0
lin pan
python3.6 -m pip install scipy 

установить с помощью вышеуказанной команды в конкретный каталог, :)

0
vishal

В 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 <module>
    from pip import main
ImportError: cannot import name main

$ exit
<login>

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

импортировать main из pip._internal

from pip._internal import main

Правка код от

Sudo nano /usr/bin/pip3
0
Akhilesh N S

В 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', ваш пункт будет поврежден и отобразит ошибку «Не удается найти основную».

0
Paul Kenjora