Примечание мейнтейнера: для тех, кто все еще сталкивается с этой проблемой, обратитесь к #5599.
После обновления 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 как средой.
Привет, @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
// в контейнере
Установлен /usr/local/lib/python2.7/dist-packages/pip-10.0.0-py2.7.egg
Зависимости обработки для 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
будет работать для вас, даже если ваши скрипты-оболочки сломаются. Если не получится, открывайте новую тему.sudo pip
. Вы, вероятно, сломаете свою систему, и если этого недостаточно, вы выполняете удаленное выполнение кода от имени пользователя root.Подводя итог, можно сказать, что это, скорее всего, не вина одного проекта/человека, и у всех есть веские основания для своих действий. Да, ваша среда сломалась. Мы понимаем. Не сваливайте вину на людей, которые добровольно тратят свое свободное время, чтобы помочь вам прямо сейчас и развить пип.
Хотите нам помочь? 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
Если у кого-то есть другие вопросы, пожалуйста, откройте новую тему.
Раздел комментариев к этой проблеме открыт для пользователей, чтобы обсудить конкретные проблемы и решения. :)
Самый полезный комментарий
Исправление для нас заключалось в закреплении на пипсе 9.03, поэтому:
вместо
очевидное исправление, но на случай, если это поможет кому-то другому!