Pip: После обновления 10-го пункта на pyenv «ImportError: невозможно импортировать имя« основной »»

Созданный на 15 апр. 2018  ·  68Комментарии  ·  Источник: pypa/pip

Примечание мейнтейнера: для тех, кто все еще сталкивается с этой проблемой, обратитесь к #5599.


  • Пип версия: 10.0
  • Версия Python: 3.6.2
  • Операционная система: Ubuntu 16.04

Описание:

После обновления pip с 9.03 до 10.0 через pip install pip --user --upgrade в среде pyenv pip отказывается запускаться и вместо этого поднимает это:

Traceback (most recent call last):
  File "/home/kleinernull/.pyenv/versions/3.6.2/bin/pip", line 7, in <module>
    from pip import main
ImportError: cannot import name 'main'
Traceback (most recent call last):
  File "/home/kleinernull/.pyenv/versions/3.6.2/bin/pip", line 7, in <module>
    from pip import main
ImportError: cannot import name 'main'

Содержимое всех трех разных файлов pip одинаково:

~ ⟩ cat .pyenv/versions/3.6.2/bin/pip                                                                            ~
#!/home/kleinernull/.pyenv/versions/3.6.2/bin/python3.6

# -*- coding: utf-8 -*-
import re
import sys

from pip._internal import main as _main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(_main())

~ ⟩ cat .pyenv/versions/3.6.2/bin/pip3                                                                           ~
#!/home/kleinernull/.pyenv/versions/3.6.2/bin/python3.6


# -*- coding: utf-8 -*-
import re
import sys

from pip import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

~ ⟩ cat .pyenv/versions/3.6.2/bin/pip3.6                                                                         ~
#!/home/kleinernull/.pyenv/versions/3.6.2/bin/python3.6

# -*- coding: utf-8 -*-
import re
import sys

from pip import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

То же самое произошло и с моей средой 3.6.1.

Временно исправить

Согласно коду основной ветки импорт должен быть таким:

#!/home/kleinernull/.pyenv/versions/3.6.2/bin/python3.6

# -*- coding: utf-8 -*-
import re
import sys

from pip._internal import main as _main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(_main())

И это решает проблему. Я понятия не имею, связано ли это с самим обновлением или с pyenv как средой.

duplicate

Самый полезный комментарий

Исправление для нас заключалось в закреплении на пипсе 9.03, поэтому:

pip install --upgrade pip==9.0.3

вместо

pip install -U pip

очевидное исправление, но на случай, если это поможет кому-то другому!

Все 68 Комментарий

Привет, @KleinerNull!

Я понятия не имею, связано ли это с самим обновлением или с pyenv как средой.

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

@pradyunsg

Я открыл вопрос в репозитории pyenv.

Мы тоже страдаем от этого, он сломал наш конвейер. Выполняется операция:

 11 #upgrade pip and install uwsgi
 12 pip install --user --upgrade pip
 13 pip install uwsgi

Убунту 16.04
Python3.6

Мы сталкиваемся с той же бедой.

// in host
$ docker pull ubuntu:xenial
$ docker run --name pip-test --rm -it ubuntu:xenial bash

// in container
# apt update
# apt install -y python-dev python-pip
# pip install --upgrade pip
Collecting pip
  Downloading pip-10.0.0-py2.py3-none-any.whl (1.3MB)
    100% |################################| 1.3MB 865kB/s 
Installing collected packages: pip
  Found existing installation: pip 8.1.1
    Not uninstalling pip at /usr/lib/python2.7/dist-packages, outside environment /usr
Successfully installed pip-10.0.0
# pip install requests
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main

То же самое здесь .. Тот же результат, что и у @HayaoSuzuki , и мы не используем pyenv

Если вы получаете это за пределами pyenv, я подозреваю, что это, скорее всего, связано с # 5221.

Просто упомянем, что pip install --user --upgrade pip в Ubuntu 16.04 тоже ломается.

Интересно, что простая установка pip устанавливает 10.0.0, но не показывает проблему
```
// в хосте
$ docker вытащить ubuntu:xenial
$ docker run --name pip-test --rm -it ubuntu:xenial bash

// в контейнере

удачное обновление

apt install -y python-setuptools

пункт easy_install

Установлен /usr/local/lib/python2.7/dist-packages/pip-10.0.0-py2.7.egg
Зависимости обработки для pip
Готовая обработка зависимостей для pip

запросы на установку pip

Сбор запросов
Скачивание запросов-2.18.4-py2.py3-none-any.whl (88kB)
100% |#################################| 92 КБ 2,9 МБ/с
Сбор certifi>=2017.4.17 (из запросов)
Загрузка certifi-2018.1.18-py2.py3-none-any.whl (151 КБ)
100% |#################################| 153 КБ 4,4 МБ/с
Сбор chardet<3.1.0,>=3.0.2 (из запросов)
Загрузка chardet-3.0.4-py2.py3-none-any.whl (133 КБ)
100% |#################################| 143 КБ 4,5 МБ/с
Сбор idna<2.7,>=2.5 (из запросов)
Загрузка idna-2.6-py2.py3-none-any.whl (56kB)
100% |#################################| 61 КБ 7,4 МБ/с
Сбор urllib3<1.23,>=1.21.1 (из запросов)
Загрузка urllib3-1.22-py2.py3-none-any.whl (132 КБ)
100% |#################################| 133 КБ 4,4 МБ/с
Установка собранных пакетов: certifi, chardet, idna, urllib3, request
Успешно установлен certifi-2018.1.18 chardet-3.0.4 idna-2.6 запросы-2.18.4 urllib3-1.22
```

что неудивительно, так как этот пункт установлен яйцом в другом месте, что больше не влияет на глобальный пункт - это также означает, что теперь у вас есть очень интересный рабочий набор для python

Хотя я понимаю, что основной проблемой, о которой сообщалось здесь и в https://github.com/pypa/pip/issues/5221 , является среда, причина в первую очередь в том, что импорт from pip import main был нарушен, поскольку пакет pip.main был перемещен в pip._internal.main . Было бы тривиально добавить ссылку с pip.main на pip._internal.main , чтобы исправить это (в то время как исправление среды — это большая работа во многих местах для многих людей). Есть ли веская причина не делать этого?

@davidjlloyd

Этот комментарий дает некоторую информацию о том, как этого не делать, но я не совсем уверен, важно ли это также для самого скрипта pip. Тем не менее, это решило проблему для меня.

@davidjlloyd Потому что from pip import main в принципе никогда не поддерживался. И хотя легко сказать «да, но это простой API, и он только что работал», на самом деле это не так — мы получили множество отчетов об ошибках от людей, ожидающих от него определенного поведения, которое мы просто не учитываем ( запуск pip.main в нескольких потоках, ожидая, что pip.main не изменит конфигурацию системы ведения журнала, ...)

Вместо того, чтобы продолжать объяснять людям, что они не должны этого делать, и постоянно иметь дело с тем фактом, что люди предполагают, что «если я могу найти функцию для вызова, она поддерживается», мы переместили все в пространство имен _internal для совершенно ясно, что вы не должны называть это.

Большая часть жалоб поступила от людей, использующих pip.main , что иронично, поскольку так легко вызвать pip в поддерживаемом режиме командной строки через subprocess . Таким образом, из всех возможных поломок эту исправить проще всего — и все же люди до сих пор не исправили ее, даже после месяцев предупреждений. (Хотя, чтобы быть справедливым по отношению к дистрибутивам Linux, они не поддерживают людей, обновляющих свои системные пакеты с помощью pip, поэтому отчеты типа # 5221 о случаях, когда скрипты, поставляемые дистрибутивом, ломаются, в основном являются ошибкой пользователя, а не неспособностью дистрибутивов решить проблему pip. 10 изменений - я уверен, что они прекрасно справляются).

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

+ pip install -U pip setuptools
Collecting pip
  Downloading https://files.pythonhosted.org/packages/62/a1/0d452b6901b0157a0134fd27ba89bf95a857fbda64ba52e1ca2cf61d8412/pip-10.0.0-py2.py3-none-any.whl (1.3MB)
Collecting setuptools
  Downloading https://files.pythonhosted.org/packages/20/d7/04a0b689d3035143e2ff288f4b9ee4bf6ed80585cc121c90bfd85a1a8c2e/setuptools-39.0.1-py2.py3-none-any.whl (569kB)
Installing collected packages: pip, setuptools
  Found existing installation: pip 8.1.1
    Not uninstalling pip at /usr/lib/python2.7/dist-packages, outside environment /usr
Successfully installed pip-10.0.0 setuptools-39.0.1

...

+ pip install jupyter opencv-python plyfile pandas
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main

Исправление для нас заключалось в закреплении на пипсе 9.03, поэтому:

pip install --upgrade pip==9.0.3

вместо

pip install -U pip

очевидное исправление, но на случай, если это поможет кому-то другому!

@peteflorence Итак, по-видимому, при запуске докера вы создаете базовый образ, а затем запускаете pip install -U pip setuptools от имени пользователя root в этом образе? Есть ли причина, по которой вам нужны последние версии pip/setuptools, если все, что вы делаете, это устанавливаете с ними другие пакеты? Не могли бы вы просто перейти на последнюю версию pip/setuptools, доступную в виде дистрибутива?

Я понимаю, что это проблема для вас - похоже, сборки докеров более склонны делать что-то от имени пользователя root, чем если бы вы работали в обычной ОС (вероятно, потому, что образ докера изолирован). Но делать это все равно не стоит. Проблема в том, что pip не управляет /usr/bin/pip , поэтому у нас нет возможности «исправить» это для работы с pip 10.

Что вы можете сделать, так это переключиться с использования /usr/bin/pip на использование python -m pip . Он по-прежнему не поддерживается и может столкнуться с другими проблемами (я не знаю, какие изменения поставщик вашей базовой ОС мог внести в системный пункт), но это позволит избежать проблемы в /usr/bin/pip , пока вы будете разбираться дольше. срочное решение вашего вопроса.

Прикрепление к пункту 9 также является решением, но возникает вопрос, зачем вообще обновлять пункт ОС, если пункт 9 в порядке? Ваш поставщик не предлагает упакованную версию pip 9?

Вместо того, чтобы продолжать объяснять людям, что они не должны этого делать, и постоянно иметь дело с тем фактом, что люди предполагают, что «если я могу найти функцию для вызова, она поддерживается», мы переместили все в пространство имен _internal, чтобы было совершенно ясно, что Вы не должны называть это.

Я не уверен, что агрессивное нарушение существующего использования неподдерживаемой функции вместо того, чтобы объявить ее устаревшей для пары основных выпусков, является лучшим подходом. Нашей первоначальной реакцией было вернуть pip к версии 9.0.3, и более ленивые разработчики, вероятно, просто покончили бы с этим. Это заставит многих пользователей упрямо цепляться за старые выпуски, что, я сомневаюсь, кому-то нужно. Однако ваша мотивация имеет смысл, и конечный результат тот же.

Для всех пользователей, столкнувшихся с этой проблемой, я думаю, что лучшее решение для замены установки системы или pyenv было любезно предоставлено @standag здесь: https://github.com/pypa/pip/issues/5221#issuecomment -381568428.

Это решение должно работать для всех, кто создает в Docker, таких как @peteflorence , без привязки к устаревшим выпускам или чему-то такому ужасному.

Временное исправление использования пункта обновления.

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

Вместо pip install -U pip

Для пункта2 pip2 install --upgrade pip

Я обновился с помощью pyenv, как python2, так и python3, теперь pip2 не работает, а pip3 работает.
После сравнения pip2 и pip3 разница заключается в строке импорта

пункт2
from pip import main

пункт3
from pip._internal import main

После замены строки импорта pip2 версией pip3 она работает

Такая же проблема, хех.

Та же проблема, но решена с помощью решения: https://github.com/pypa/pip/issues/5240#issuecomment -381673100

Та же проблема:

+ pip install --upgrade pip
Collecting pip
  Downloading https://files.pythonhosted.org/packages/62/a1/0d452b6901b0157a0134fd27ba89bf95a857fbda64ba52e1ca2cf61d8412/pip-10.0.0-py2.py3-none-any.whl
 (1.3MB)
Installing collected packages: pip
  Found existing installation: pip 8.1.1
    Not uninstalling pip at /usr/lib/python2.7/dist-packages, outside environment /usr
Successfully installed pip-10.0.0
+ pip install awscli requests simplejson
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main

Теперь это странно, он устанавливает pip 10 в /usr/local/bin, и он находится первым в PATH перед /usr/bin, но он не использует его, пока вы не перейдете в новую оболочку. Я видел, как это произошло, когда я подошел к этому ящику, чтобы попытаться установить более новый awscli вручную...

$ python --version
Python 2.7.12
$ pip --version
pip 10.0.0 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
$ sudo pip install --upgrade awscli 
 <blah blah>
$ aws --version
aws-cli/1.11.13 Python/3.5.2 Linux/4.4.0-1049-aws botocore/1.4.70
$ /usr/local/bin/aws --version
aws-cli/1.15.4 Python/2.7.12 Linux/4.4.0-1049-aws botocore/1.10.4
$ which aws
/usr/local/bin/aws
$ echo $PATH
/home/ec2-user/bin:/home/ec2-user/.local/bin:/opt/bamboo-elastic-agent/bin:/opt/jdk-8/bin:/opt/maven-2.1/bin:/opt/maven-1.0.2/bin:/opt/ant-1.9/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/bin:/bin:/opt/puppetlabs/bin

@pfmoore спасибо за комментарии. Да, нашему образу докера, по-видимому, нужен pip 9, и мы наследуем образ докера nvidia cuda 8.0 и кучу других вещей, у которых его, должно быть, не было. Закрепление — хорошее решение для нас — это исследовательская система, мы хотим разумно заблокировать код. Но да, очевидно, для многих других вам понадобится решение, которое приведет вас к совместимости с пунктом 10.

Теперь это странно, он устанавливает pip 10 в /usr/local/bin

Я не пользователь Unix, но я помню, как некоторые люди говорили о «перефразировании» в оболочке? Может ли это быть проблемой? Выполняется ли поиск пути в кэше bash и требуется ли запрос на повторный поиск пути?

Да, нашему образу докера, по-видимому, нужен был пункт 9...

Круто - конечно, привязка к пункту 9 - разумное решение в вашем случае. Я немного нервничаю из-за того, что предложения «просто прикрепить к пункту 9» остаются без ответа, потому что есть риск, что люди увидят их и слепо скопируют, просто отсрочив момент, когда им нужно исправить свою среду. Но, конечно, подумать о своих требованиях и решить, что закрепление работает на вас, это нормально. Так что извините за использование вашего комментария в качестве мыльницы :-)

Мы прикрепились к пункту 9, и это «исправило» нас, но, конечно, мы заинтересованы в возможности использовать пункт 10 в какой-то момент.

попробуйте использовать pip2 install xx @HayaoSuzuki

как вернуться на пип 9.0.0..
Он все еще показывает ту же ошибку для меня. Пожалуйста, напишите все шаги

@swtt123 ты можешь попробовать pip install pip==9.0.1

пип 10.0, я тоже сталкиваюсь

AttributeError: 'module' object has no attribute 'main'

при попытке использовать pip.main(['install', '-r', 'requirements.txt'])

@ p00j4 Импорт pip из вашей программы не поддерживается — см. документы

ой! Я понял, однако, теперь вынужден изменить много мест.
Спасибо @pfmoore за голову.

Следите за тем, чтобы bash кэшировал исполняемый файл:

$ which pip
/usr/bin/pip

$ pip install --user pip
Collecting pip
(...)
Successfully installed pip-10.0.0

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

$ which pip
/usr/bin/pip

$ hash -d pip  # this clears the 'pip' entry from bash's executables locations hash table

$ which pip
/home/zwinny/.local/bin/pip

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

Я создал новую установку Raspbian на Raspberry Pi 3B+. Ничего особенного - довольно ванильная конфигурация - и пока все идет хорошо.

Я только что дошел до самого последнего шага в процессе установки:

pip install --upgrade pip

Collecting pip
  Downloading https://files.pythonhosted.org/packages/62/a1/0d452b6901b0157a0134fd27ba89bf95a857fbda64ba52e1ca2cf61d8412/pip-10.0.0-py2.py3-none-any.whl (1.3MB)
    100% |████████████████████████████████| 1.3MB 101kB/s 
Installing collected packages: pip
Successfully installed pip-10.0.0

... и теперь pip полностью забит:

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

Согласно комментарию выше, я подтвердил, что ~i/.local/bin/pip работает нормально. Ошибка возникает с /usr/bin/pip. Однако запуск hash -d pip не обновил кэшированное местоположение.

Принудительное понижение версии до 9.0.1 (через строку параметров -Iv и --force-reinstall) также не решило проблему. По-видимому, единственное решение, помимо отказа от обновления pip, — запустить pip из ~/.local/bin/pip.

python -m pip install --upgrade pip 

Работал на меня. Я надеюсь, что это поможет кому-то.

Сегодня я установил новый дистрибутив Ubuntu и попытался установить и запустить некоторые базовые пакеты Python. Мне было предложено обновить pip, и я выполнил указанную мне команду. Этот обновленный пункт до версии 10, которая, по-видимому, не работает с той же ошибкой, что и в начале этой темы. Я не сделал ничего, кроме того, что сделал бы обычный пользователь, чтобы обновить pip и установить свои любимые пакеты. Даже не используя pyenv.

Ни одно из решений здесь не решает мою проблему. Если я запускаю python -m pip install --upgrade pip , я получаю «Требование уже обновлено». Если я попытаюсь перейти на версию 9, я получаю ту же начальную ошибку:

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

После повторного прочтения этой темы решение @sfsdfd использовать ~/.local/bin/pip — это то, что наконец сработало:

~/.local/bin/pip install my-favourite-package

По-видимому, это работает (успешно) возвращаясь к моей старой версии pip. Добавление этого к ~/.bashrc для меня более приятное исправление:

export PATH=$PATH:~/.local/bin

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

Я исправил проблему, обновив код в /usr/bin/pip , изменив from pip import main на from pip._internal import main .

Здесь подробности:

$ dpkg -S /usr/bin/pip
python-pip: /usr/bin/pip
$ dpkg -S /usr/bin/pip2
python-pip: /usr/bin/pip2
$ apt-file search /usr/bin/pip
colorized-logs: /usr/bin/pipetty
pipebench: /usr/bin/pipebench
pipemeter: /usr/bin/pipemeter
pipexec: /usr/bin/pipexec
python-pip: /usr/bin/pip
python-pip: /usr/bin/pip2
python3-pip: /usr/bin/pip3
rt-tests: /usr/bin/pip_stress

После pip install --upgrade pip :

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

$ cat /usr/bin/pip
#!/usr/bin/python
# 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())

После обновления /usr/bin/pip :

$ cat /usr/bin/pip
#!/usr/bin/python
# 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
from pip._internal import main
if __name__ == '__main__':
    sys.exit(main())

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

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

Информация о моей системе:

$ uname -a
Linux devops-kubernetes-master 4.13.0-38-generic #43-Ubuntu SMP Wed Mar 14 15:20:44 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=17.10
DISTRIB_CODENAME=artful
DISTRIB_DESCRIPTION="Ubuntu 17.10"
NAME="Ubuntu"
VERSION="17.10 (Artful Aardvark)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 17.10"
VERSION_ID="17.10"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=artful
UBUNTU_CODENAME=artful

$ python --version
Python 2.7.14

$ apt list --installed | grep python-

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

libpython-all-dev/artful,now 2.7.14-2ubuntu1 amd64 [installed]
libpython-dev/artful,now 2.7.14-2ubuntu1 amd64 [installed,automatic]
libpython-stdlib/artful,now 2.7.14-2ubuntu1 amd64 [installed,automatic]
python-all/artful,now 2.7.14-2ubuntu1 amd64 [installed,automatic]
python-all-dev/artful,now 2.7.14-2ubuntu1 amd64 [installed,automatic]
python-apt-common/artful,artful,now 1.4.0~beta3build2 all [installed]
python-asn1crypto/artful,artful,now 0.22.0-1 all [installed,automatic]
python-cffi-backend/artful,now 1.9.1-2build2 amd64 [installed,automatic]
python-crypto/artful-updates,artful-security,now 2.6.1-7ubuntu0.1 amd64 [installed,automatic]
python-cryptography/artful,now 1.9-1 amd64 [installed,automatic]
python-dbus/artful,now 1.2.4-1build3 amd64 [installed,automatic]
python-dev/artful,now 2.7.14-2ubuntu1 amd64 [installed,automatic]
python-enum34/artful,artful,now 1.1.6-1 all [installed,automatic]
python-gi/artful,now 3.24.1-2build1 amd64 [installed,automatic]
python-idna/artful,artful,now 2.5-1 all [installed,automatic]
python-ipaddress/artful,artful,now 1.0.17-1 all [installed,automatic]
python-keyring/artful,artful,now 10.4.0-1 all [installed,automatic]
python-keyrings.alt/artful,artful,now 2.2-2 all [installed,automatic]
python-minimal/artful,now 2.7.14-2ubuntu1 amd64 [installed,automatic]
python-pip/artful,artful,now 9.0.1-2 all [installed]
python-pip-whl/artful,artful,now 9.0.1-2 all [installed,automatic]
python-pkg-resources/artful,artful,now 36.2.7-2 all [installed,automatic]
python-secretstorage/artful,artful,now 2.3.1-2 all [installed,automatic]
python-setuptools/artful,artful,now 36.2.7-2 all [installed,automatic]
python-setuptools-doc/artful,artful,now 36.2.7-2 all [installed]
python-six/artful,artful,now 1.10.0-4 all [installed,automatic]
python-talloc/artful,now 2.1.9-2ubuntu1 amd64 [installed]
python-wheel/artful,artful,now 0.29.0-2 all [installed,automatic]
python-xdg/artful,artful,now 0.25-4 all [installed,automatic]

Я исправил так:

$ пип --версия
Traceback (последний последний вызов):
Файл "/usr/bin/pip", строка 9, в
из основного импорта пипсов
ImportError: невозможно импортировать имя main
$ sudo apt-get удалить питон-пип
$ sudo apt-get установить питон-пип
$ пип --версия
pip 10.0.0 из /home/user/.local/lib/python2.7/site-packages/pip (python 2.7)

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

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

$ sudo apt-get удалить питон-пип
$ пип -v
bash: /usr/bin/pip: нет такого файла или каталога

но когда я попробую это$ питон -м пункт -Vpip 10.0.0 из /home/user/.local/lib/python2.7/site-packages/pip (python 2.7)

поэтому я удалил полную папку pip
$ sudo rm -r /home/user/.local/lib/python2.7/site-packages/pip*

тогда снова я попробую это
$ питон -м пункт -V
/usr/bin/pip: нет модуля с именем pip

затем снова установите pip
$ sudo apt установить python-pip
$ питон -м пункт -V
pip 8.1.1 из usr/lib/python2.7/dist-packages (python 2.7)

Надеюсь, это решит проблему

ПОТРЕБЛЯЯ 3 ЧАСА, ВОТ ЧТО Я ПОЛУЧИЛ

ЧТОБЫ УДАЛИТЬ пип 10.0.0:
sudo apt-get удалить python-pip

но тогда вы не сможете установить правильную требуемую версию pip прямыми методами.

ПОНИЖЕНИЕ ДО ЗАВЕСТНОЙ РАБОЧЕЙ ВЕРСИИ ПОСЛЕ УСТАНОВКИ
когда pip10 выдает ошибку: ImportError: невозможно импортировать имя main
вам нужно будет запустить:
python -m pip install pip==KNOW_WORKING_VERSION>

ДЛЯ УСТАНОВКИ ЛЮБОГО ПАКЕТА С ИСПОЛЬЗОВАНИЕМ PIP10:
sudo python -m pip установить PACKAGE_NAME
это сработало.

Ваше здоровье :)

Та же проблема, исправить проблему: полная переустановка: python-pip

просто перезайдите в оболочку, как указано здесь
https://github.com/pypa/pip/issues/5240#issuecomment-382262586

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

хех... что я только не делал...

Я только что развернул свою установку pip.
python -m pip install --user --upgrade pip==9.0.3

Я хотел сообщить, что эта проблема также возникает в сборке Windows при использовании AppVeyor для CI:
Результат следующий:

Running Install scripts
SET PATH=%PYTHON%;%PYTHON%\Scripts;%PATH%
pip install --disable-pip-version-check --user --upgrade pip
Collecting pip
  Downloading https://files.pythonhosted.org/packages/0f/74/ecd13431bcc456ed390b44c8a6e917c1820365cbebcb6a8974d1cd045ab4/pip-10.0.1-py2.py3-none-any.whl (1.3MB)
Installing collected packages: pip
Successfully installed pip-10.0.1
pip install -U setuptools
Traceback (most recent call last):
  File "c:\python27-x64\lib\runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "c:\python27-x64\lib\runpy.py", line 72, in _run_code
    exec code in run_globals
  File "C:\Python27-x64\Scripts\pip.exe\__main__.py", line 5, in <module>
ImportError: cannot import name main
Command exited with code 1

У меня есть: pip install --disable-pip-version-check --user --upgrade pip в нескольких сценариях appveyor.yml , основанных на рекомендации из этого примера: https://github.com/ogrisel/python-appveyor-demo/blob/master/appveyor.yml #L111

Это работало хорошо до pip 10.x, и я подозреваю, что если другие создали appveyor.yml на основе этого, они также столкнутся с этой проблемой.

Переключение на easy_install -U pip сработало, но у меня есть несколько репозиториев, которые работали до этого, теперь их нужно обновить для работы с pip 10.x.

Похоже, рекомендуемый подход к настройке CI должен придерживаться версии 9.0.3 или использовать easy_install.

Похоже, рекомендуемый подход к настройке CI должен придерживаться версии 9.0.3 или использовать easy_install.

Рекомендуемый подход — удалить зависимость вашей библиотеки/приложения/инструмента от деталей внутренней реализации pip. easy_install больше не активно улучшается AFAIK и, вероятно, не поддерживает многие вещи, которые делает pip.

Что касается вашей конкретной проблемы, вы, вероятно, можете исправить ее, запустив python -m pip install --force-reinstall pip , чтобы исправить неработающий скрипт. Если нет, пожалуйста, создайте новую проблему.

Рекомендуемый подход — удалить зависимость вашей библиотеки/приложения/инструмента от деталей внутренней реализации pip. easy_install больше не активно улучшается AFAIK и, вероятно, не поддерживает многие вещи, которые делает pip.

Я предполагаю, что вы не читали остальную часть его поста. Он имел в виду использование easy_install для установки pip, а не вместо pip:

Переключение на easy_install -U pip сработало...

Также он не полагается на детали внутренней реализации pip. Он использует свежую раскрутку AppVeyor и обновляет pip с помощью указанной им команды, и ничего больше:

pip install --disable-pip-version-check --user --upgrade pip

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

@ikreymer Проблема, о которой вы, кажется, говорите, связана с Appveyor, который работает под управлением Windows. Обсуждаемый здесь вопрос относится к утилите pyenv , которая является исключительно утилитой Unix.

Я не знаю о @pradiunsg , но я все больше запутался в том, какие проблемы обсуждаются. Основная причина проста — pip (преднамеренно) переместил внутренние API, и это вызывает проблемы у людей, которые прямо или косвенно полагались на инструменты, которые их использовали. Но это не то, что будет изменено. Поэтому, если мы хотим помочь пользователям найти решение их конкретных проблем, нам нужно сосредоточить обсуждение на одной проблеме за раз.

Итак, могу я спросить - если вам нужна помощь с проблемой на Appveyor, пожалуйста, не могли бы вы открыть новую проблему, описывающую проблему, и мы переместим обсуждение туда. (Большая часть подробностей, вероятно, содержится в вашем комментарии, так что это будет отправной точкой для проблемы, но полное описание того, как воспроизвести проблему в совершенно новом проекте Appveyor, было бы чрезвычайно полезно, помогая нам диагностировать проблему. .

@arvoelke :

Он имел в виду использование easy_install для установки pip, а не вместо pip

Установка pip с использованием easy_install вполне может иметь проблемы, и если это произойдет, мы не сможем вас поддержать, потому что (как сказал @pradiunsg ) easy_install устарела, активно не поддерживается и отсутствуют последние функции. Но если у вас это работает, и вам не нужна наша помощь, то ладно - вас никто не останавливает.

У многих других участников этой ветки такая же проблема

Дайте определение «такой же». Если вы имеете в виду «видеть ошибки из кода, который импортирует pip.main , тогда да, но это не проблема с pip, это преднамеренное, обратно несовместимое изменение внутренней реализации pip. Если вы хотите, чтобы мы просто сказали " жестко, вы не должны использовать внутренние API pip", тогда хорошо - достаточно одной проблемы, и мы просто закроем ее как "не ошибку". Но если вы хотите, чтобы мы помогли вам решить, что часть вашей среды не выполнила совет, опубликованный 6 месяцев назад, и найти для вас обходной путь, который позволит вам продолжать использовать pip, пока ваша среда исправляется поставщиком, тогда вам придется помочь нам, чтобы помочь вам. сказать «у меня та же проблема» в отчете об утилите, предназначенной исключительно для Unix, когда вы работаете в Windows, определенно не поможет нам помочь вам ...

Обсуждаемая здесь проблема связана с pyenv, которая является исключительно утилитой Unix.

Одним из первых ответов в этой теме было:

То же самое здесь .. Тот же результат, что и у @HayaoSuzuki , и мы не используем pyenv

Аспект pyenv кажется более или менее второстепенным, основываясь на приведенных выше комментариях и связанных проблемах и коммитах, в том числе возникающих при свежих установках Ubuntu и RaspberryPi. Опять же, все это уже является частью этого вопроса. Основная причина «одна и та же» (т. е. обновление pip, а затем попытка его запуска) для всех, включая OP, и поэтому мы можем создавать больше проблем, но на самом деле между ними не происходит ничего другого — только в как проявляется проблема.

И сказать «у меня такая же проблема» в отчете о чисто Unix-утилите, когда вы работаете в Windows, определенно не поможет нам вам помочь...

Я не работаю в Windows. Я работаю на Ubuntu, как я уже говорил. Другой автор использует Windows, но они просто обновляют pip и запускают pip, как и все остальные в этом выпуске. Существует довольно распространенное мнение, что использование pyenv не имеет принципиального значения для решения проблемы.

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

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

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

В случае, если это поможет кому-то еще, я могу подтвердить, что переключение обновления пункта appveyor.yml с:

pip install --disable-pip-version-check --user --upgrade pip

к:

python -m pip install --upgrade pip

решает проблему. Теперь нужно обновить еще несколько репозиториев!

Я столкнулся с тем же симптомом, описанным здесь, в другой ситуации.

Я пытался использовать локально установленный pip в системе Ubuntu 16.0.4:

curl -O https://bootstrap.pypa.io/get-pip.py
export PYTHONUSERBASE=$(pwd)
python ./get-pip.py --user
export PYTHONPATH=$(pwd)/lib/python2.7/site-packages

python ./bin/pip --version

Traceback (most recent call last):
  File "/path/to/bin/pip", line 7, in <module>
    from pip._internal import main
ImportError: No module named _internal

Оказалось, что Ubuntu добавляет путь к sys.path через site.py , который переопределял мой PYTHONPATH , показанный ниже:

import sys
print(sys.path)
['', '/usr/local/lib/python2.7/dist-packages/pip-9.0.1-py2.7.egg', '/path/to/lib/python2.7/site-packages`, ...]

Я попытался избежать добавления флага -S для python, задокументированного на странице руководства как:

-S Отключите импорт модуля site и зависящие от сайта манипуляции с sys.path, которые он влечет за собой.

и это сработало:

python -S ./bin/pip --version

pip 10.0.1 from path/to/bin/pip (python 2.7)

Совместное использование на случай, если это может помочь другим. В моем образе докера (база ubuntu:xenial ) я получил следующую ошибку:

Step 8/12 : RUN pip install -U pip  && pip install -r /tmp/requirements.txt
 ---> Running in e4ff51b013f0
Collecting pip
  Downloading https://files.pythonhosted.org/packages/0f/74/ecd13431bcc456ed390b44c8a6e917c1820365cbebcb6a8974d1cd045ab4/pip-10.0.1-py2.py3-none-any.whl (1.3MB)
Installing collected packages: pip
  Found existing installation: pip 8.1.1
    Not uninstalling pip at /usr/lib/python2.7/dist-packages, outside environment /usr
Successfully installed pip-10.0.1
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main

Я изменил pip install -U pip && pip install -r /tmp/requirements.txt на pip2 install -U pip && pip2 install -r /tmp/requirements.txt . Это решило проблему.

Я не уверен, видел ли я ответ/ответ на комментарий @davidjlloyd :

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

Могу я спросить, почему для этого не был установлен процесс устаревания?
Кажется, что это было бы довольно просто: на import из pip проверьте sys.argv[0] ; если это не pip или pipX[.Y] , извергните несколько DeprecationWarning , что это не удастся в выпуске X+, со ссылкой на то, что вы упомянули: https://pip.pypa. io/en/latest/user_guide/#using -pip-from-your-program

Существует ли процесс, чтобы попытаться избежать подобных вещей в будущем?

Я не уверен, видел ли я ответ/ответ на комментарий @davidjlloyd :

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

Могу я спросить, почему для этого не был установлен процесс устаревания?

Потому что никогда не поддерживался. Зачем нам предупреждать, что мы прекращаем поддержку того, что никогда не поддерживали? Люди полагали , что можно читать исходный код pip и использовать найденные там функции в своем собственном коде. Этого никогда не было. Мы сказали, что он может сломаться, и в пункте 10 это произошло.

Кажется, это было бы довольно просто, при импорте pip проверьте sys.argv[0]; если это не pip или pipX[.Y], выдать несколько предупреждений об устаревании

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

И опять же, нет необходимости осуждать то, что изначально не поддерживается.

Существует ли процесс, чтобы попытаться избежать подобных вещей в будущем?

Что за штука? Поломка, вызванная изменением нами вещей, для которых мы не гарантируем обратную совместимость? Нет. Нам не нужно этого избегать. Хотя на самом деле мы стараемся управлять процессом, из вежливости к нашим пользователям ( не обязанность!). В этом случае мы опубликовали изменение за 6 месяцев, предложили людям, которым нужно было изменить свой код, и потратили много времени с момента выпуска, помогая пользователям, у которых были проблемы, потому что программное обеспечение, на которое они полагаются, не было учтено. эти предупреждения. Это огромная работа, которую проделала очень небольшая группа добровольцев, пытаясь смягчить ситуацию, вызванную тем, что люди ожидали поддержки, которую никогда не предлагали и не обещали. Пожалуйста.

У нас есть процессы (предупреждения об устаревании и т. д.) для изменения вещей, для которых мы гарантируем совместимость, но импорт pip в вашу собственную программу не является одним из них.

У меня был скрипт bash, который установил flask и запросил обновление, сломал мой скрипт, но я понимаю причины, изложенные выше. Моя работа, чтобы мой скрипт работал, заключалась в том, чтобы просто запустить новый процесс bash, может быть, это неправильно, но это сработало для меня. Надеюсь, это может помочь другим с подобными сценариями.

pip install --upgrade pip
echo "pip install Flask" | bash
echo "pip install requests" | bash

@OneLogicalMyth то, что вы ищете, может быть hash -d pip , см. https://github.com/pypa/pip/issues/5221#issuecomment -381568428.

полностью пропустил это, даже после внимательного прочтения, спасибо, @austinbutler , это решило мою проблему.

Единственная причина, по которой эта проблема была оставлена ​​открытой и не закрыта как дубликат немедленно, заключалась в том, что я был обеспокоен тем, делает ли pyenv что-то с прокладками и нужно ли как-то помочь pip. Это было не так, поэтому этот вопрос закрыт.

Я уже перечислял обходные пути (все они тривиальны) почти для всех упомянутых здесь проблем — взгляните на https://github.com/pypa/pip/issues/5221#issuecomment -382069604. Надеемся, что это снимает все опасения, поднятые в этом вопросе. Если это не так, пожалуйста, откройте новую проблему.

@benoit-pierre Я добавил ваше предложение использовать python -m pip в связанный комментарий. Спасибо за это. :)


Установка pip с помощью easy_install вполне может иметь проблемы, и если это произойдет, мы не сможем вас поддержать, потому что (как сказал @pradiunsg ) easy_install устарела, активно не поддерживается и в ней отсутствуют последние функции.

Спасибо за разъяснение моей позиции @pfmoore. Это то, о чем я говорил.

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

Я тоже.


Несколько общих советов (принимайте или нет) о вещах, которые я увидел в этом выпуске:

  • Если команда pip по какой-то причине не работает, попробуйте запустить python -m pip . Скорее всего, python -m pip будет работать для вас, даже если ваши скрипты-оболочки сломаются. Если не получится, открывайте новую тему.
  • Не запускайте pip от имени пользователя root и не делайте sudo pip . Вы, вероятно, сломаете свою систему, и если этого недостаточно, вы выполняете удаленное выполнение кода от имени пользователя root.
  • Не используйте easy_install по причинам, указанным в начале этого комментария. Вот еще контекст (он немного устарел).
  • Пожалуйста, не прикрепляйте к пункту 9. Я твердо верю, что это активно замедляет прогресс упаковки Python в целом.

    • pip 9 никогда не будет поддерживать PEP 517/518, и оставление на pip 9 означает, что вам придется приложить усилия, чтобы переключиться позже, когда пакет сломается в последнюю минуту, потому что они переключаются на более новые стандарты упаковки.


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

Хотите нам помочь? https://donate.pypi.org — это вещь, и если это не ваш тип вещей , в этом самом трекере проблем есть много открытых проблем, с которыми вы можете нам помочь.

Сейчас я отойду от этого вопроса.

Хорошо, и последнее, если кто-то все еще хочет обсудить наше решение о перемещении всей нашей кодовой базы в pip._internal , откройте новую проблему и дайте мне упоминание. Я потрачу некоторое время, чтобы написать что-нибудь со ссылками и всем остальным, о том, почему Пип сделал это. Таким образом, у @pypa/pip-committers будет единственное место, на которое люди могут ссылаться по этой теме.

На данный момент это работало на python3 / pip3 , чтобы откатить его

python3 -m pip install --user --upgrade pip==9.0.3

@freckletonj Пожалуйста, не говорите людям вернуться к пункту 9. Вы не должны так решать эту проблему. Есть гораздо лучшие способы.

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

извините @pradiunsg , но это все еще не работает:

$ pip3 install --upgrade --user pip
Collecting pip
  Using cached https://files.pythonhosted.org/packages/0f/74/ecd13431bcc456ed390b44c8a6e917c1820365cbebcb6a8974d1cd045ab4/pip-10.0.1-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 9.0.3
    Uninstalling pip-9.0.3:
      Successfully uninstalled pip-9.0.3
Successfully installed pip-10.0.1
$ pip3
Traceback (most recent call last):
  File "/usr/local/bin/pip3", line 7, in <module>
    from pip import main
ImportError: cannot import name 'main'

Из https://github.com/pypa/pip/issues/5221#issuecomment -382069604, на который я ссылался выше:

hash -r pip # or hash -d pip

Если у кого-то есть другие вопросы, пожалуйста, откройте новую тему.

5599 предоставляет информацию и обеспечивает единое место для поиска помощи в решении этой проблемы для конечных пользователей.

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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги