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.