2011-10-27 3 views
62

pip을 사용하여 패키지를 설치하면 필요한 모든 패키지도 함께 설치됩니다 (종속성). 해당 패키지를 제거해도 종속 패키지가 제거됩니까?"pip"가있는 패키지를 제거해도 종속 패키지가 제거됩니까?

+1

왜 그냥 시도해 볼 수 없습니까? 나는 당신의 질문에 답하기 위해 정확히 그것을 할 것이지만, 어떤 이유로 핍은 지금 여기에 패키지 색인을 가져올 수 없습니다. –

+2

@ThomasVanderStichele 그 이유는 미래의 Google 직원을 위해 온라인에서 답변을 얻을 수 없기 때문입니다. – Mark

+0

[pip newsgroup] (https://groups.google.com/d/topic/python-virtualenv/JqIbyUDy2-E/)에서 찾았습니다. 토론), 사람들은 적어도 지금은이 기능을 원하지 않는다. 얼마나 불쌍! –

답변

42

아니, 종속 패키지를 제거하지 않습니다

$ pip install specloud 
$ pip freeze 

figleaf == 0.6.1
코 == 1.1.2
피노키오 == 0.3
specloud == 0.4 0.5

$ pip uninstall specloud 
$ pip freeze 

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

당신은 모든 패키지가 아니라 여전히 specloud 패키지 자체입니다 볼 수 있듯이.

88

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

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

마지막 업데이트는 1 년 전이었습니다. 오늘 그것을 사용해 보았고 비참하게 깨졌습니다. –

+5

그것은 나를 위해 일한 것 같습니다. – se210

+5

나를 위해 일했습니다. – timkofu

4

나는 성공적으로 bash는 줄을 사용하여 패키지의 의존성을 제거했습니다

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

이 핍 1.5.4

+18

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

+0

도 '8.1.2'작업 중입니다. – vyscond

+6

이 것은 ** 의존성의 ** 의존성이 아닌 ** 의존성을 제외하고 ** 오직 ** 제거합니다. – tamakisquare

3

에 너무 좋은 측정을 위해 일했다. 종속성이 설치된 다른 패키지와 교차하는 시나리오를 고려하십시오. 새로운 설치가있을 때마다 requirements.txt가 동결되고 이전 버전의 requirements.txt를 비교하여 종속성을 수동으로 제거하는 것이 좋습니다.

0

https://github.com/cls1991/pef을 시도해 볼 수 있습니다. 모든 종속성을 가진 패키지를 제거합니다.

+0

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

+0

안전을 고려했을 때 코드를 해킹 할 수 있고 보호 코드를 끄기 만하면됩니다. – cls1991

관련 문제