"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.