2011-10-27 77 views
62

Khi bạn sử dụng pip để cài đặt một gói, tất cả các gói bắt buộc cũng sẽ được cài đặt với nó (phụ thuộc). Việc gỡ cài đặt gói đó cũng có xóa các gói phụ thuộc không?Việc gỡ cài đặt gói có "pip" cũng có xóa các gói phụ thuộc không?

+1

Tại sao bạn không thể thử và xem? Tôi sẽ làm chính xác điều đó để trả lời câu hỏi của bạn, nhưng vì lý do nào đó, pip không thể lấy chỉ mục gói ở đây ngay bây giờ. –

+2

@ThomasVanderStichele vì sau đó câu trả lời sẽ không có sẵn trực tuyến cho những người dùng Google trong tương lai :) – Mark

+0

Tôi đã tìm thấy trong [pip newsgroup] (https://groups.google.com/d/topic/python-virtualenv/JqIbyUDy2-E/ thảo luận) người pip không muốn chức năng này, ít nhất là bây giờ. Thật đáng tiếc! –

Trả lời

42

Không, nó không gỡ bỏ các phụ thuộc gói:

$ pip install specloud 
$ pip freeze 

figleaf == 0.6.1
mũi == 1.1.2
pinocchio == 0,3
specloud == 0.4 .5

$ pip uninstall specloud 
$ pip freeze 

figleaf == 0.6.1
mũi == 1.1.2
pinocchio == 0,3

Như bạn có thể xem tất cả các gói vẫn còn đó nhưng không phải là specloud gói riêng của mình.

88

Bạn có thể cài đặt và sử dụng tiện ích pip-autoremove để xóa gói và phụ thuộc không sử dụng.

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

Cập nhật lần cuối là một năm trước. Đã thử sử dụng nó ngày hôm nay và đã phá vỡ thảm hại. –

+5

Dường như đã làm việc cho tôi. – se210

+5

Làm việc cho tôi. – timkofu

4

tôi đã gỡ bỏ thành công phụ thuộc của một gói sử dụng dòng bash này:

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

này làm việc trên pip 1.5.4

+18

Mặc dù về mặt kỹ thuật giải pháp này * loại bỏ tất cả các phụ thuộc, như đã đề cập trong các câu trả lời khác, * cũng * gỡ bỏ các phụ thuộc không ** duy nhất cho mục tiêu **, bao gồm cả các gói được cài đặt từ các gói hệ thống. Ví dụ, trên hệ thống của tôi kịch bản này cuối cùng thất bại vì gói đích có các phụ thuộc chung với pip, vì vậy pip đã gỡ bỏ các phụ thuộc của riêng nó trước khi kịch bản lệnh có thể kết thúc, và sau đó thất bại. – sinisterstuf

+0

cũng hoạt động trên '8.1.2'. – vyscond

+6

Hãy coi chừng điều này loại bỏ ** chỉ ** phụ thuộc vào mức độ tiếp theo, nhưng ** không ** phụ thuộc của những phụ thuộc đó. – tamakisquare

3

Và đối với biện pháp tốt quá. Xem xét các tình huống trong đó các phụ thuộc giao nhau với các gói khác mà bạn đã cài đặt. Bạn nên đóng băng thành tệp requirements.txt với mọi cài đặt mới và so sánh các phiên bản trước của requirements.txt để xóa các phụ thuộc theo cách thủ công.

0

Bạn có thể thử dùng https://github.com/cls1991/pef. Nó sẽ loại bỏ gói với tất cả các phụ thuộc của nó.

+0

pef dường như chỉ hoạt động trong môi trường ảo, thật không may. – Bas

+0

Nó chỉ là cân nhắc an toàn, bạn có thể hack mã, chỉ cần tắt mã bảo vệ. – cls1991

Các vấn đề liên quan