[python] pip 업그레이드 후 오류 : ‘main’이름을 가져올 수 없습니다

pip를 사용하여 패키지를 설치하려고 할 때 마다이 가져 오기 오류가 발생합니다.

guru@guru-notebook:~$ 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'

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

import sys

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

이전에는 제대로 작동했지만 왜이 오류가 발생하는지 잘 모르겠습니다. 이 오류에 대해 검색했지만 해결해야 할 것이 없습니다.

더 자세한 정보가 필요하면 알려주십시오. 질문을 업데이트하겠습니다.



답변

실수로 시스템 핍을 업그레이드해야합니다 (아마도 같은 것을 통해 sudo pip install pip --upgrade)

pip 10.x는 내부 위치를 조정합니다. pip3당신이보고 있는 명령은 패키지 관리자 (아마도 데비안 기반입니까?)에서 제공하는 명령이며 pip가 관리하는 파일이 아닙니다.

pip의 이슈 트래커에서 이것에 대해 더 읽을 수 있습니다

시스템 pip를 업그레이드 하지 않고 virtualenv를 사용하고 싶을 것입니다 .

pip3바이너리 를 복구하려면을 (를) 해야합니다 sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall.

“지원되지 않는 영역”(시스템 패키지 관리자 외부의 시스템 패키지 업그레이드)을 계속하려는 경우 python3 -m pip ...대신 대신 사용할 수 있습니다 pip3.


답변

pip 파일을 수정하여 오류를 지울 수 있습니다.

파일 위치를 확인하십시오.

$ which pip

경로-> / usr / bin / pip

해당 위치 ( / usr / bin / pip )로 이동하여 터미널을 엽니 다.

시작하다: $ sudo nano pip

너는 볼 수있어:

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

로 변경:

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

그런 다음 ctrl + o 변경 사항을 작성하고 종료하십시오.

희망이 있습니다 !!


답변

데비안, Linux Mint 사용자 우분투 제품군

의 Anthony의 설명 덕분에 원래 시스템 pip (/ usr / bin / 및 dist-packages /에 있음)를 유지하고 수동으로 설치된 pip (~ / .local /에 있음)를 제거하여 충돌을 해결할 수 있습니다.

$ python3 -m pip uninstall pip

python3-pip데비안 패키지의 Ubuntu / Debian pip v8.1.1 (16.04) $ pip3 -V은 최신 pip v10.0.1과 동일한 검색 결과를 표시하며 PyPI의 최신 모듈을 올바르게 설치합니다. 그것은 작업이 pip(이미 $ PATH에) 명령 플러스 좋은를 --user보면 2016 년 이후 패치 – 기본적으로 옵션 핍 릴리스 노트 의 최신 버전은 사용의 경우 특정 버그 수정 및 일부 새로운 기능에 대해 대부분이다 그래서 하지 모두가 아직 핍 업그레이드를 서두르어야합니다. 그리고 새로운 pip 10은 어쨌든 파이썬 가상 환경에 배포 할 수 있습니다.

그러나 pips에 관계없이 OS는 pip 필요없이 APT를 사용하여 일반적인 Python 모듈 (numpy 포함)을 신속하게 설치할 수 있습니다.
$ sudo apt install python3-numpy python3-scipy(시스템 종속성
$ sudo apt install python3-pip이있는 경우)

빠른 적절한 구문 알림 (자세한 내용 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). 수천 개가 있으며 데비안과 우분투에서 통합 테스트를받습니다. 사용자 별 ( pip install --user옵션) 또는 virtualenv / venv 내에 설치하려고하지 않으면 apt가 필요할 수 있습니다. 이러한 시스템 패키지는 너무 가상 envs에서 액세스 할 수 있습니다 VIRTUALENV은 우아하게 envs 모듈의 사본을 제공하지 않는 경우 수입에 시스템 libs와를 사용하여 다시 떨어질 것이다. 사용자 별 설치 (pip 포함 --user) 사용자 단위 모듈 ~/.local/lib도 재정의됩니다.

이것은 시스템 전체 설치 이기 때문에 거의 제거 할 필요가 없습니다 (OS 종속성에주의 할 필요가 있음). APT는 필요한 모든 시스템 라이브러리 및 C 확장을 추적하고 제공하지만 pip를 사용하면 그러한 보장없으므로 많은 시스템 종속성이있는 패키지 (예 : scipy 또는 matplotlib)에 편리합니다 .

사실, 시스템 전체의 파이썬 패키지 (사용자 별, 홈 디렉토리 수준 이하)와 달리 Ubuntu sudo pip OS를 중단하지 않기 위해 APT 패키지 관리자 () 대신 APT 패키지 관리자를 사용하여 APT 가 OS를 저장하는 디렉토리를 sudo pip3대상으로합니다 . /usr/lib/python3/dist-packages민감한 모듈. 최신 데비안 / 우분투 릴리스는 Python 3에 크게 의존하므로 사전 설치된 모듈은 관리되며 apt변경해서는 안됩니다.

따라서 pip3 install명령 을 사용하는 경우 virtualenv ( sudo apt install python3-virtualenv) 또는 Python3 내장 ( -m venv) 또는 사용자 별 수준 ( --userpip 옵션, 우분투에서 기본값 으로 제공됨) 과 같은 격리 된 가상 개발 환경에서 실행되는지 확인하십시오 2016 이후 PIP),하지만 하지 시스템 전체 (절대 sudo pip3!), 핍 때문에 를 방해 APT가 패키지 관리자의 작동이 우분투 운영 체제에 영향을 줄 수있는 구성 요소를 시스템에 사용되는 파이썬 모듈이 예기치 않게 변경 될 때. 행운을 빕니다!


P. S. 모두는 상단의 ‘이상적’용액 (데비안 / 우분투 방법)에 대한 것이다.

여전히 새 pip3 v10을 독점적으로 사용하려는 경우 3 가지 빠른 해결 방법이 있습니다.

  • 새 bash 세션 (새 터미널 탭 또는 유형 bash)을 열면 pip3 v10을 사용할 수있게됩니다 (참조 pip3 -V). 데비안의 pip3 v8은 계속 설치되어 있지만 고장입니다. 또는
  • $ hash -d pip3 && pip3 -V $ PATH에서 pip3 경로 이름을 새로 고치는 명령 입니다. 데비안의 pip3 v8은 계속 설치되어 있지만 고장입니다. 또는
  • $ sudo apt remove python3-pip && hash -d pip3새로운 pip3 v10을 위해 데비안의 pip3 v8을 완전히 제거 하는 명령 입니다.

참고 :--user virtualenv가 아닌 한, 데비안이 제공하지 않은 pip에 항상 플래그 를 추가해야합니다 ! ( ~/.local/2016 년 이후로 debian / ubuntu 제공 python3-pip 및 python-pip에서 기본값으로 python 패키지를 배포합니다 ). virtualenv 외부에서 시스템 전체의 pip 10 사용은 Ubuntu / Debian에서 실제로 지원되지 않습니다. 절대로 sudo pip3!

자세한 내용은
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-381673100


답변

한 단계로만 해결됩니다.

나도이 문제에 직면했지만 시간을 낭비하지 않고 하나의 명령으로 간단히 해결할 수 있으며 여러 시스템에서 시도했지만이 문제에 대한 가장 깨끗한 솔루션입니다. 그리고 그것은 :

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.


답변

python -m pip install대신에 사용pip install

예:

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

pip(RESP. pip3) 실행 파일은 배포판에 의해 (제공되는 python-pip우분투 16.04에 패키지)와에 위치 /usr/bin/pip.

따라서 pippip를 업그레이드 할 때 패키지 자체 가 최신 상태로 유지되지 않아 중단 될 수 있습니다.

다음 python -m pip과 같이 직접 사용하는 경우 :

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

파이썬 경로를 통과하고 최신 버전의 pip를 찾아 해당 파일을 실행합니다.

파일 import은를 통해 실행 가능하다는 사실에 의존 하지만 매우 표준적인 유형의 인터페이스이므로 해커 데비안 스크립트보다 깨질 가능성이 적습니다.

그런 다음 다음 별칭을 추가하는 것이 좋습니다 .bashrc.

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

Ubuntu 18.04 /usr/bin/pip3파일은 다음을 수행합니다.

from pip import main

아마도 파산 한 지점에서 main제거 되었을 pip것입니다.

주요 pip 커밋은 다음과 같습니다. 95bcf8c5f6394298035a7332c441868f3b0169f4 “ pip 18.0에 들어간 모든 내부 API를 pip._internal로 이동”

pip39.0.1에서 18.0로 업데이트 한 후 Ubuntu 16.04에서 테스트되었습니다 .

pyenv

그러나 궁극적으로 심각한 파이썬 개발을 위해서는 pyenv + virtualenv로 자체 로컬 Python을 설치하는 것이 좋습니다.이 스크립트는 다음 우분투 버그를 피할 수도 있습니다. /ubuntu/682869/how-do-i- 다른 파이썬 설치 버전 사용 -apt-get / 1195153 # 1195153


답변

pip를 다시 설치하면이 문제를 해결할 수 있습니다.

다음 명령 행 명령 중 하나를 사용하여 pip를 다시 설치하십시오.

파이썬 2 :

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

파이썬 3 :

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


답변

pip가 다른 경로에 캐시되었는지 확인하려면 $ which pip를 호출 하고 경로가 오류가 발생한 경로와 다른지 확인하십시오.

$ hash -r

캐시가 지워지면 pip가 다시 작동합니다. 참조 : http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file-or-directory