내 가상 환경 중 하나를 수정하려고합니다. 설치된 모든 라이브러리를 프로덕션과 일치하는 라이브러리로 다시 설정하고 싶습니다.
pip로 이것을 수행하는 빠르고 쉬운 방법이 있습니까?
내 가상 환경 중 하나를 수정하려고합니다. 설치된 모든 라이브러리를 프로덕션과 일치하는 라이브러리로 다시 설정하고 싶습니다.
pip로 이것을 수행하는 빠르고 쉬운 방법이 있습니까?
답변:
이 스 니펫을 대체 솔루션으로 찾았습니다. virtualenv를 재생성하는 것보다 라이브러리를보다 우아하게 제거합니다.
pip freeze | xargs pip uninstall -y
VCS를 통해 패키지를 설치 한 경우 해당 행을 제외하고 패키지를 수동으로 제거해야합니다 (아래 설명에서 높이기).
pip freeze | grep -v "^-e" | xargs pip uninstall -y
postactivate
. 예를 들어 어떤 것이 남을지 를 변경했을 수도 있습니다.
setuptools
패키지가 제거되었음을 알았습니다 . 다음 지침에 따라 문제를 해결했습니다. stackoverflow.com/questions/7446187/…
pip freeze --exclude-editable | xargs pip uninstall -y
grep 패턴을 사용하지 않고 VCS 패키지를 무시 하는 데 사용할 수도 있습니다
이것은 모든 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)
pip uninstall -r requirements.txt -y
pip uninstall -y -r <(pip freeze)
한 번에 모든 작업을 수행 할 수 있습니다 .
이것은 최신으로 작동합니다. 나는 그것이 가장 짧고 선언적인 방법이라고 생각합니다.
virtualenv --clear MYENV
그러나 일반적으로 불변성 규칙 이후 virtualenv를 삭제하고 다시 만듭니다!
wipeenv
합니까? virtualenvwrapper.readthedocs.org/en/latest/…
wipeenv
환경에서 오류가 발생하고 pip install -e
개발 빌드 의 컨텍스트에서 사용되는 경우 아무것도 제거하지 않지만 사용 하려고 시도해도 virtualenv --clear MYENV
오류가 발생하지 않으며 아무것도 제거하지 않습니다. 환경에 이전에 설치했을 수있는 패키지. 적어도 이것은 OSX의 경우입니다. 자세한 내용은 bitbucket.org/dhellmann/virtualenvwrapper/issues/211/… 를 참조하십시오 .
wipeenv
virtualenvwrapper에서 제공하는 별칭이므로 모든 사람이이를 가질 수있는 것은 아닙니다.
이 답변은 스레드에서 가장 우아한 솔루션 중 하나이므로 주석 섹션 에서이 답변을 높이고 싶었습니다. 이 답변에 대한 전체 크레딧은 @joeb 로갑니다 .
pip uninstall -y -r <(pip freeze)
위의 답변 중 많은 부분이 처리하지 못하는 virtualenv 컨텍스트 외부에서 사용자 패키지 폴더를 지우는 유스 케이스에 유용합니다.
편집 : 누구나이 명령을 Makefile에서 작동시키는 방법을 알고 있습니까?
편의를 위해 이것을 내 bash 프로필에 추가합니다.
alias pipuninstallall="pip uninstall -y -r <(pip freeze)"
그런 다음 다음을 실행하십시오.
pipuninstallall
pipenv 를 사용하는 경우 다음을 실행할 수 있습니다.
pipenv uninstall --all
pip freeze
패키지가 설치되어 있지 않으면 결과가 출력되지 않고 pip uninstall
불행히도 불평합니다).
<(...)
은 bashism입니다. 따라서 bash -c "..."를 사용하거나 pip freeze | pip uninstall -r /dev/stdin
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.
다른 이름을 사용 pip list
하거나 pip freeze
포함해야하는--local
다른 답변 은 공통 네임 스페이스에있는 패키지도 제거합니다.
여기 제가 정기적으로 사용하는 스 니펫이 있습니다.
pip freeze --local | xargs pip uninstall -y
참조 : pip freeze --help
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.
. 그런 다음 더 이상 모듈을 제거 할 수 없습니다.
pip freeze
)pip freeze | xargs pip uninstall -y
pip list
)pip list | awk '{print $1}' | xargs pip uninstall -y
virtualenv
)virtualenv --clear MYENV
pip list
)는 실수로 pip가 실수로 자신을 제거 할 때까지 훌륭하게 작동합니다. -_-
다음을 수행하여 관리했습니다.
현재 설치된 패키지 목록으로 reqs.txt 라는 요구 사항 파일을 작성하십시오.
pip freeze > reqs.txt
그런 다음 reqs.txt 에서 모든 패키지를 설치 제거하십시오.
pip uninstall \
-y # remove the package with prompting for confirmation
-r reqs.txt
실수로 핍 요구 사항 파일을 항상 가지고 있기 때문에이 방법이 마음에 듭니다. 또한 반복 가능합니다.
가장 빠른 방법은 virtualenv를 완전히 다시 만드는 것입니다. 프로덕션과 일치하는 requirements.txt 파일이 있다고 가정합니다.
# On production:
pip freeze > reqs.txt
# On your machine:
rm $VIRTUALENV_DIRECTORY
mkdir $VIRTUALENV_DIRECTORY
pip install -r reqs.txt
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
완료되면 파일이 최종적으로 삭제됩니다.
(@blueberryfields의 답변에 대한 의견이 충분하지 않기 때문에 이것을 답변으로 추가)
@blueberryfields의 답변은 잘 작동하지만 제거 할 패키지가 없으면 실패합니다 (이 "모두 제거"가 스크립트 또는 makefile의 일부인 경우 문제가 될 수 있음). 이것은 xargs -r
GNU 버전을 사용할 때 해결 될 수 있습니다 xargs
:
pip freeze --exclude-editable | xargs -r pip uninstall -y
부터 man xargs
:
-r, --no-run-if-empty
표준 입력에 비 공백이 없으면 명령을 실행하지 마십시오. 일반적으로 입력이 없어도 명령이 한 번 실행됩니다. 이 옵션은 GNU 확장입니다.
다음 만 사용하여 플랫폼 간 지원 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.
필자의 경우, pip
macOS에 설치된 Homebrew를 사용하여 실수로 여러 패키지를 전세계에 설치 했습니다. 기본 패키지로 되 돌리는 가장 쉬운 방법은 간단합니다.
$ brew reinstall python
또는 다음을 사용하는 경우 pip3
:
$ brew reinstall python3
에서 명령 셸 윈도우의 명령이
pip freeze | xargs pip uninstall -y
작동하지 않습니다. 그래서 Windows를 사용하는 사람들을 위해 다른 방법을 찾아 냈습니다.
pip freeze
A와 명령 이 .txt 파일입니다.pip uninstall -r *textfile.txt*
을 pew
사용하는 경우 wipeenv 명령을 사용할 수 있습니다 .
pew wipeenv [env]
--user 옵션을 사용하여 사용자 사이트에 설치된 모든 패키지를 제거합니다.
pip3 고정 --user | xargs pip3 제거 -y
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=...
. 현재 비어있는 디렉토리를 모두 제거하면 당신도 물릴 것입니다!