"pip"로 패키지를 제거하면 종속 패키지도 제거됩니까?


153

당신이 사용하는 경우 pip패키지를 설치하기 위해 필요한 모든 패키지는 또한 (종속)와 함께 설치됩니다. 해당 패키지를 제거하면 종속 패키지도 제거됩니까?


1
왜 시도하고 볼 수 없습니까? 나는 당신의 질문에 대답하기 위해 정확히 그렇게 할 것이지만, 어떤 이유로 pip는 지금 여기에서 패키지 색인을 얻을 수 없습니다.
Thomas Vander Stichele

1
나는 pip 뉴스 그룹 에서 pip 사람들이 적어도이 기능을 원하지 않는다는 것을 알았습니다 . 얼마나 불쌍!
Michel Samia

4
@ThomasVanderStichele 그렇다면 Google 직원들이 온라인에서 답변을 사용할 수 없기 때문에 :)
Mark

1
@ 마크, 당신은 여기에 자신의 질문에 대한 답변을 적어 둡니다.
Thomas Vander Stichele

5
@ThomasVanderStichele : 나는 OP가 아니지만 여기에 이것이 SO에 대한 합법적 인 Q & A pip인 이유는 다음과 같습니다. 관리자 권한 (패키지는 아니지만)으로 인해 패키지를 손상 시키거나 제거하는 것은 큰 슬픔이었고 제대로 할 수있는 기회가있었습니다. c) 인터넷 연결이 좋지 않을 수 있습니다. 보안상의 이유로 회사 컴퓨터는 종종 방화벽으로 연결되므로 직접 연결을 가정 할 수 없으므로 필요한 모든 것과 버전을 미리 알고 다운로드해야합니다.
smci

답변:


80

아니요, 종속성 패키지를 제거하지 않습니다. 지정된 패키지 만 제거합니다.

$ pip install specloud
$ pip freeze # all the packages here are dependencies of specloud package

figleaf == 0.6.1
코 == 1.1.2
피노키오 == 0.3
specloud == 0.4.5

$ pip uninstall specloud
$ pip freeze

figleaf == 0.6.1
코 == 1.1.2
피노키오 == 0.3

보시다시피 이러한 패키지는 종속성 specloud이며 여전히 존재하지만 specloud패키지 자체는 아닙니다 .

아래에서 언급 한 것처럼 pip-autoremove 유틸리티를 설치하고 사용하여 패키지와 사용하지 않는 종속성을 제거 할 수 있습니다 .


2
패키지의 독점 종속성 패키지는 specloud어떻습니까?
Fusion

@Fusion이 패키지는 specloud의 종속성입니다.
BernardoBarreto

250

pip-autoremove 유틸리티를 설치하고 사용하여 패키지와 사용하지 않는 종속성을 제거 할 수 있습니다 .

# install pip-autoremove
pip install pip-autoremove
# remove "somepackage" plus its dependencies:
pip-autoremove somepackage -y

9
불행히도 아직 실제 Python3 지원은 없습니다 ( github.com/invl/pip-autoremove/issues/18 참조 ).
asmaier

10
2019
snacks

@ loved.by.Jesus-저는 python 3.8.3을 사용하고 테스트했지만 여전히 명령이 pip-autoremove(밑줄이 아닌 대시) 로 실행되는 것을 봅니다 . pip_autoremove나에게 준다 command not found.
bwv549

@ bwv549 python<version>(버전을 지정해야 할 때) 를 통해 실행했음을 설명해야 합니다. 그런 식으로 이름을 조정해야합니다 pip_autoremove(대시는 패키지 이름으로 사용할 수 없습니다). 예를 들어 python3.8 pip_autoremove작동하지만 작동 python3.8 pip-autoremove하지 않습니다. 그렇지 않으면 간단한 터미널 명령으로 지적했듯이 pip-autoremove완벽하게 작동합니다.)-시스템의 기본 파이썬 버전 만 사용됩니다. 메시지를 보내 줘서 고마워요.
loved.by. 예수

9

이 bash 줄을 사용하여 패키지의 종속성을 성공적으로 제거했습니다.

for dep in $(pip show somepackage | grep Requires | sed 's/Requires: //g; s/,//g') ; do pip uninstall -y $dep ; done

이것은 pip 1.5.4에서 작동했습니다.


40
기술적으로이 솔루션 다른 답변에서 언급했듯이 모든 종속성을 성공적으로 제거 하지만 시스템 패키지에서 설치된 것을 포함 하여 대상에 고유하지 않은 종속성 제거 합니다. 예를 들어, 내 시스템에서 대상 패키지에 pip와 공통된 종속성이 있기 때문에이 스크립트는 결국 실패 했으므로 pip는 스크립트가 완료되기 전에 자체 종속성을 제거한 다음 실패했습니다.
sinisterstuf

19
이렇게하면 다음 수준의 다운 종속성 제거 되지만 해당 종속성의 종속성은 제거 되지 않습니다 .
tamakisquare

0

일부는 수행하기가 다소 어려울 수도 있지만 해결책을 찾았습니다.

1 단계 (python3 및 Linux의 경우) :
pip3 install pip-autoremove
2 단계 :
cd /home/usernamegoeshere/.local/bin/
3 단계 :
gedit /home/usernamegoeshere/.local/lib/python3.8/site-packages/ pip_autoremove.py
및 모든 pip를 pip3 4 단계로 변경하십시오. ./pip-autoremove packagenamegoeshere

적어도 이것은 나를 위해 일한 것입니다 ...


-1

https://github.com/cls1991/pef를 사용해보십시오 . 모든 종속성이있는 패키지를 제거합니다.


pef는 불행히도 가상 환경에서만 작동하는 것 같습니다.
Bas

안전 고려 사항이므로 코드를 해킹하고 보호 코드를 간단히 끌 수 있습니다.
cls1991

1
이러한 의존성이 다른 배포판에서 필요하지 않은 "매달려"있는 것을 확인합니까?
wim

예, 참조 횟수를 기반으로합니다.
cls1991 5

이봐, 내가 갈래하고 코드를 수정했습니다. 아래 링크를 찾으십시오. github.com/nalangekrushna/pef
Krissh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.