pip로 설치된 모든 패키지를 제거하는 가장 쉬운 방법은 무엇입니까?


614

내 가상 환경 중 하나를 수정하려고합니다. 설치된 모든 라이브러리를 프로덕션과 일치하는 라이브러리로 다시 설정하고 싶습니다.

pip로 이것을 수행하는 빠르고 쉬운 방법이 있습니까?


10
@patelshahrukh 파이썬 제거는 pip 패키지를 제거 하지 않습니다 . 제발 피가 그를하고 그 이후 모두 가장 가능성이 작동하지 않습니다 당신이 그것을 것, 생각하는 방식 과 의 불안정한 상태에서 컴퓨터를 남길 수 있습니다 다시 파이썬을 설치하는 방법에 따라, 수정에 더 많은 작업을 .
— blueberryfields

이는 개발 모드 또는 편집 가능한 모드로 설치된 패키지에 도움이 될 수 있습니다. stackoverflow.com/questions/17346619/…
— Charlie Parker

답변:


923

이 스 니펫을 대체 솔루션으로 찾았습니다. virtualenv를 재생성하는 것보다 라이브러리를보다 우아하게 제거합니다.

pip freeze | xargs pip uninstall -y

VCS를 통해 패키지를 설치 한 경우 해당 행을 제외하고 패키지를 수동으로 제거해야합니다 (아래 설명에서 높이기).

pip freeze | grep -v "^-e" | xargs pip uninstall -y

4
나는 이것이 가상 환경을 완전히 제거하지 않기 때문에 이것이 좋은 해결책이라고 생각합니다 postactivate. 예를 들어 어떤 것이 남을지 를 변경했을 수도 있습니다.
— niceguydave

5
이것을 실행 한 후 setuptools패키지가 제거되었음을 알았습니다 . 다음 지침에 따라 문제를 해결했습니다. stackoverflow.com/questions/7446187/…
— Dan

1
@ gerty3000 예, 질문에 따라 virtual-env에 설치된 모든 패키지를 제거합니다. 환경에서 setuptools가 전역 위치에 설치하는 것이 더 좋을까요?
— blueberryfields

7
pip freeze --exclude-editable | xargs pip uninstall -ygrep 패턴을 사용하지 않고 VCS 패키지를 무시 하는 데 사용할 수도 있습니다
— Connor Brinton

2
편집 가능한 패키지를 제거하려면 stackoverflow.com/questions/17346619
— Dan Oak

318

이것은 모든 Mac, Windows 및 Linux 시스템에서 작동합니다. requirements.txt 파일에서 모든 pip 패키지 목록을 가져 오려면 (참고 : 존재하는 경우 requirements.txt를 덮어 쓰고 새 파일을 작성합니다. 또한 오래된 requirements.txt를 바꾸지 않으려는 경우 다른 파일 이름을 지정하십시오. 모든 다음 명령 (places.txt).

pip freeze > requirements.txt

이제 하나씩 제거

pip uninstall -r requirements.txt

한 번에 모두 제거하려면

pip uninstall -r requirements.txt -y

requirements.txt파일 이있는 기존 프로젝트에서 작업 중이고 환경이 다른 requirements.txt경우 위의 예에서 를로 바꾸십시오 toberemoved.txt. 그런 다음 위의 단계를 수행하면requirements.txt 를 사용하여 이제 깨끗한 환경을 업데이트 .

그리고 파일을 만들지 않고 단일 명령의 경우 (@joeb 제안).

pip uninstall -y -r <(pip freeze)

11
아마 그들이 알지 못하는 경우에, requirements.txt 파일을 강제로 덮어 쓰고 있다고 말할 가치가 있습니다. :)
— Dave Gregory

4
또한 모든 패키지를 제거하려면 "-y"를 추가하면됩니다. 예 :pip uninstall -r requirements.txt -y
— David Metcalfe

58
pip uninstall -y -r <(pip freeze)한 번에 모든 작업을 수행 할 수 있습니다 .
— joeb

1
@ joeb 그래 우리도 그렇게 할 수 있습니다.
— Harshad Kavathiya 2016 년

1
@HarshadKavathiya 다른 파일을 사용하여 "current.txt"와 같은 pip freeze를 저장할 수 있습니다. 따라서 requirements.txt는 변경되지 않은 환호를 유지할 수 있습니다
— NikosKeyz

118

이것은 최신으로 작동합니다. 나는 그것이 가장 짧고 선언적인 방법이라고 생각합니다.

virtualenv --clear MYENV

그러나 일반적으로 불변성 규칙 이후 virtualenv를 삭제하고 다시 만듭니다!


7
이것은 실제로 실행과 동일 wipeenv합니까? virtualenvwrapper.readthedocs.org/en/latest/…
— Taylor Edmiston 2016

실제로-(내가 방금 봤던 것) wipeenv환경에서 오류가 발생하고 pip install -e개발 빌드 의 컨텍스트에서 사용되는 경우 아무것도 제거하지 않지만 사용 하려고 시도해도 virtualenv --clear MYENV오류가 발생하지 않으며 아무것도 제거하지 않습니다. 환경에 이전에 설치했을 수있는 패키지. 적어도 이것은 OSX의 경우입니다. 자세한 내용은 bitbucket.org/dhellmann/virtualenvwrapper/issues/211/… 를 참조하십시오 .
— mpacer

2
wipeenvvirtualenvwrapper에서 제공하는 별칭이므로 모든 사람이이를 가질 수있는 것은 아닙니다.
— Jonathan Hartley

2
글쎄, 이것은 더러운 속임수이지만 마술처럼 작동합니다. 모든 사람이 pip uninstall -r requirements.txt -y를 사용하는 것이 좋습니다. 크게 정리합니다.
— 무에 마

84

이 답변은 스레드에서 가장 우아한 솔루션 중 하나이므로 주석 섹션 에서이 답변을 높이고 싶었습니다. 이 답변에 대한 전체 크레딧은 @joeb 로갑니다 .

pip uninstall -y -r <(pip freeze)

위의 답변 중 많은 부분이 처리하지 못하는 virtualenv 컨텍스트 외부에서 사용자 패키지 폴더를 지우는 유스 케이스에 유용합니다.

편집 : 누구나이 명령을 Makefile에서 작동시키는 방법을 알고 있습니까?

보너스 : bash 별명

편의를 위해 이것을 내 bash 프로필에 추가합니다.

alias pipuninstallall="pip uninstall -y -r <(pip freeze)"

그런 다음 다음을 실행하십시오.

pipuninstallall

pipenv의 대안

pipenv 를 사용하는 경우 다음을 실행할 수 있습니다.

pipenv uninstall --all

8
쉽게 # 1이어야 함
— Mark

나는 그것을 좋아하지만 null 경우에는 작동하지 않습니다 ( pip freeze패키지가 설치되어 있지 않으면 결과가 출력되지 않고 pip uninstall불행히도 불평합니다).
— Eric G

흠. 아마도 pip freeze 출력이 비어 있지 않은지 확인하는 bash 함수로 감쌀 수 있습니다. 나는 명령을 멋진 짧은 원 라이너로 유지하면서 그것을 달성하는 좋은 방법을 보지 못합니다.
— Taylor Edmiston

1
make는 기본적으로 sh를 사용하지만 대체 구문 <(...)은 bashism입니다. 따라서 bash -c "..."를 사용하거나 pip freeze | pip uninstall -r /dev/stdin
— Caesar

Azure Notebook에서는 작동하지 않습니다.ERROR: Cannot uninstall 'bitarray'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
— SeaDude

54

다른 이름을 사용 pip list하거나 pip freeze 포함해야하는--local 다른 답변 은 공통 네임 스페이스에있는 패키지도 제거합니다.

여기 제가 정기적으로 사용하는 스 니펫이 있습니다.

 pip freeze --local | xargs pip uninstall -y

참조 : pip freeze --help


좋은 답변 ... 나에게 일했다
— igorkf

이 오류가 발생한 패키지에 도달 할 때까지 작동했습니다 ERROR: Cannot uninstall 'bitarray'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.. 그런 다음 더 이상 모듈을 제거 할 수 없습니다.
— SeaDude

39

방법 1 (함께 pip freeze)

pip freeze | xargs pip uninstall -y

방법 2 (포함 pip list)

pip list | awk '{print $1}' | xargs pip uninstall -y

방법 3 (함께 virtualenv)

virtualenv --clear MYENV

2
sudo는 필요하지 않으며, 글로벌 머신 설정에 영향을주기 때문에 신중하게 고려하지 않고 사용하는 것은 위험합니다. 예를
— blueberryfields

6
방법 2 ( pip list)는 실수로 pip가 실수로 자신을 제거 할 때까지 훌륭하게 작동합니다. -_-
— Justin

20

다음을 수행하여 관리했습니다.

현재 설치된 패키지 목록으로 reqs.txt 라는 요구 사항 파일을 작성하십시오.

pip freeze > reqs.txt

그런 다음 reqs.txt 에서 모든 패키지를 설치 제거하십시오.

pip uninstall \
   -y # remove the package with prompting for confirmation
   -r reqs.txt

실수로 핍 요구 사항 파일을 항상 가지고 있기 때문에이 방법이 마음에 듭니다. 또한 반복 가능합니다.


간단하고 우아한 매력처럼 작동
— Satyaaditya

19

가장 빠른 방법은 virtualenv를 완전히 다시 만드는 것입니다. 프로덕션과 일치하는 requirements.txt 파일이 있다고 가정합니다.

# On production:
pip freeze > reqs.txt

# On your machine:
rm $VIRTUALENV_DIRECTORY
mkdir $VIRTUALENV_DIRECTORY
pip install -r reqs.txt

2
로컬 설치 .egg-info 파일을 생성 한 나머지 설치 / 제거 프로세스를 방해하는 편집 가능한 설치 (기본적으로 setuptools 개발 모드 설치)가있는 경우에도 처리합니까? 파일 세트이기 때문에 존재를 처리하는 방법을 알지 못하며 아무것도 제거하지 않고 MYENV의 로컬 디렉토리 구조를 다음과 같이 완성합니다.`> MYENV / bin / python3.4의 새 python 실행 파일> 또한 MYENV / bin / python에서 실행 파일 생성> setuptools, pip, wheel ... done 설치 .` 그러나 MYENV는 환경을 재설정하지 않았습니다!
— mpacer

16

Windows에서 path올바르게 구성된 경우 다음을 사용할 수 있습니다.

pip freeze > unins && pip uninstall -y -r unins && del unins

유닉스 계열 시스템의 경우도 마찬가지입니다.

pip freeze > unins && pip uninstall -y -r unins && rm unins

'파일을 찾을 수 없습니다'와 같은 문제가 발생할 수 있으므로 이것이 완전히 확실하지는 않지만 경고가 표시됩니다.

편집 : 명확성을 위해 : unins 이 명령이 실행될 때 데이터가 기록되는 임의의 파일입니다.pip freeze > unins

그 다음에 작성된 파일은 묵시적 ​​동의 / 사전 승인을 통해 위에서 언급 한 패키지를 제거하는 데 사용됩니다. pip uninstall -y -r unins

완료되면 파일이 최종적으로 삭제됩니다.



14

먼저 모든 패키지를 requirements.txt

pip freeze > requirements.txt

그런 다음 모두 제거

pip uninstall -y -r requirements.txt 

9

내가 아는 오래된 질문이지만 나중에 참조 할 수 있도록 넘어졌습니다. 이제 이렇게 할 수 있습니다.

pip uninstall [options] <package> ...
pip uninstall [options] -r <requirements file> ...

-r,-요구 사항 파일

주어진 요구 사항 파일에 나열된 모든 패키지를 설치 제거하십시오. 이 옵션은 여러 번 사용할 수 있습니다.

로부터 PIP 문서 버전 8.1


8

Windows 사용자의 경우 이것이 Windows PowerShell에서 사용하는 것입니다

 pip uninstall -y (pip freeze)

6

(@blueberryfields의 답변에 대한 의견이 충분하지 않기 때문에 이것을 답변으로 추가)

@blueberryfields의 답변은 잘 작동하지만 제거 할 패키지가 없으면 실패합니다 (이 "모두 제거"가 스크립트 또는 makefile의 일부인 경우 문제가 될 수 있음). 이것은 xargs -rGNU 버전을 사용할 때 해결 될 수 있습니다 xargs:

pip freeze --exclude-editable | xargs -r pip uninstall -y

부터 man xargs:

-r, --no-run-if-empty

표준 입력에 비 공백이 없으면 명령을 실행하지 마십시오. 일반적으로 입력이 없어도 명령이 한 번 실행됩니다. 이 옵션은 GNU 확장입니다.


6
pip3 freeze --local | xargs pip3 uninstall -y

비어있는 경우이 명령을 여러 번 실행해야 할 수 있습니다 pip3 freeze --local.


3

이것은 모든 파이썬 패키지를 제거하는 가장 쉬운 방법이었습니다.

from pip import get_installed_distributions
from os import system
for i in get_installed_distributions():
    system("pip3 uninstall {} -y -q".format(i.key))

2

다음 만 사용하여 플랫폼 간 지원 pip:

#!/usr/bin/env python

from sys import stderr
from pip.commands.uninstall import UninstallCommand
from pip import get_installed_distributions

pip_uninstall = UninstallCommand()
options, args = pip_uninstall.parse_args([
    package.project_name
    for package in
    get_installed_distributions()
    if not package.location.endswith('dist-packages')
])

options.yes = True  # Don't confirm before uninstall
# set `options.require_venv` to True for virtualenv restriction

try:
    print pip_uninstall.run(options, args)
except OSError as e:
    if e.errno != 13:
        raise e
    print >> stderr, "You lack permissions to uninstall this package.
                      Perhaps run with sudo? Exiting."
    exit(13)
# Plenty of other exceptions can be thrown, e.g.: `InstallationError`
# handle them if you want to.

2

이것은 나를 위해 작동하는 명령입니다.

pip list | awk '{print $1}' | xargs pip uninstall -y

2

크로스 플랫폼에서 쉽고 강력한 방법으로 pipenv에서 작업하는 방법은 다음과 같습니다.

pip freeze 
pip uninstall -r requirement

pipenv로 :

pipenv run pip freeze 
pipenv run pip uninstall -r requirement

그러나 piplock 또는 pipfile을 업데이트하지 않으므로주의하십시오.


1

당신이 실행중인 경우 virtualenv:

virtualenv --clear </path/to/your/virtualenv>

예를 들어 virtualenv가 인 /Users/you/.virtualenvs/projectx경우 다음을 실행합니다.

virtualenv --clear /Users/you/.virtualenvs/projectx

가상 환경이 어디에 있는지 모르는 경우 which python활성화 된 가상 환경 내에서 실행 하여 경로를 얻을 수 있습니다


1

필자의 경우, pipmacOS에 설치된 Homebrew를 사용하여 실수로 여러 패키지를 전세계에 설치 했습니다. 기본 패키지로 되 돌리는 가장 쉬운 방법은 간단합니다.

$ brew reinstall python

또는 다음을 사용하는 경우 pip3:

$ brew reinstall python3

이 답변은 환경에 대해 너무 많이 가정하고 pyenv를 사용하는 경우 문제를 직접 해결하지 않습니다.
— Mark

@Mark pyenv를 사용하고 있다면 다른 것을해야합니다. 당신이 아닌 일반적인 경우에, 나는 이것이 가장 단순하고 해킹이없는 해결책이라고 믿습니다. 이 조건은 답변 시작 부분에 명시 적으로 명시되어 있습니다.
— 라돈 로스 버러

OP는 virtualenvs에 대해 물었다. 그는 Mac을 사용하거나 Python을 설치하기 위해 양조하는 것에 대해 구체적으로 언급하지 않았습니다. 따라서 OS 또는 추출이 사용되었다고 가정 할 수 없으며이 답변으로 모든 조건을 해결할 수는 없습니다. pip와 같은 도구를 사용하여 환경을 해결하는 데 중점을두면 내부 환경의 컨텍스트를 해결합니다. 이해가 되길 바랍니다.
— Mark

1
@ 마크 나는 당신의 입장을 이해합니다. 우리는 동의하지 않을 수 있습니다. "pip로 설치 한 모든 패키지를 제거하는 가장 쉬운 방법은 무엇입니까?"라는 링크를 클릭하는 Google 직원을 도와 드리고 싶습니다. 그들이 pip에 의해 전체적으로 설치된 모든 패키지를 정말로 제거하고 싶을 때 .
— 라돈 로스 버러

@RadonRosborough와 함께 링크 제목은 OP가 실제로 같은 질문을하지 않더라도 내가 왜 여기에 도착했는지를 나타냅니다.
— Kenn Sebesta

1

에서 명령 셸 윈도우의 명령이 pip freeze | xargs pip uninstall -y작동하지 않습니다. 그래서 Windows를 사용하는 사람들을 위해 다른 방법을 찾아 냈습니다.

  1. 설치된 모든 패키지 이름 복사 핍 으로부터 pip freezeA와 명령 이 .txt 파일입니다.
  2. 그런 다음 .txt 파일 의 위치로 이동 하여 명령을 실행하십시오.pip uninstall -r *textfile.txt*


1

--user 옵션을 사용하여 사용자 사이트에 설치된 모든 패키지를 제거합니다.

pip3 고정 --user | xargs pip3 제거 -y


나는이 답변이 많은 새로운 정보를 추가하지 않는다고 생각합니다. 이것과 같은 기존의 유사한 유사한 답변에 대한 개선을 제안했을 것입니다 : stackoverflow.com/a/45475070/11138259
— sinoroc

-1

Pip은 어떤 패키지가 설치되었고 어떤 패키지가 시스템의 패키지 관리자에 의해 설치되었는지 알 방법이 없습니다. 이를 위해서는 다음과 같이해야합니다.

rpm 기반 배포판의 경우 (python2.7을 pip를 설치 한 python 버전으로 대체) :

find /usr/lib/python2.7/ |while read f; do
  if ! rpm -qf "$f" &> /dev/null; then
    echo "$f"
  fi
done |xargs rm -fr

deb 기반 배포의 경우 :

find /usr/lib/python2.7/ |while read f; do
  if ! dpkg-query -S "$f" &> /dev/null; then
    echo "$f"
  fi
done |xargs rm -fr

그런 다음 빈 디렉토리를 정리하십시오.

find /usr/lib/python2.7 -type d -empty |xargs rm -fr

배포판에서 모든 (대부분의) 파이썬 패키지를 제거하고 깨진 시스템으로 남겨 둘 것이므로 최상위 답변이 매우 오도 된 것으로 나타났습니다.


모든면에서, 이것은 필적 할만한 것 같습니다. 왜 dpkg-query -S '/usr/lib/python2.7/*'이름과 dpkg-query -L각 이름을 추출 하여 관련 파일을 덤프하지 않습니까? 이미 매니페스트가 준비되어 있습니다. 필자의 주된 반대 의견은 pip가 아닌 다른 곳에 설치된 패키지를 대상으로하는 대신, 예상 한 관리자 이외의 다른 곳에 의해 그리고 pip가 일반적으로 손대지 않아야하는 위치에 설치된 패키지를 대상으로한다는 것입니다. pip list -l로컬로 설치 한 패키지를 나열하고 일부는 심지어 패키지도 나열합니다 pip install --target=.... 현재 비어있는 디렉토리를 모두 제거하면 당신도 물릴 것입니다!
— John P
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.