Làm thế nào để cập nhật / nâng cấp gói bằng pip?


168

Cách để cập nhật một gói bằng cách sử dụng pip là gì? những người không làm việc:

pip update
pip upgrade

Tôi biết đây là một câu hỏi đơn giản nhưng nó rất cần thiết vì nó không dễ tìm ( tài liệu pip không bật lên và các câu hỏi khác từ tràn ngăn xếp có liên quan nhưng không chính xác về điều đó)

Câu trả lời:


274

Cách là

sudo pip install [package_name] --upgrade

hoặc trong ngắn hạn

sudo pip install [package_name] -U

sudo sẽ yêu cầu nhập mật khẩu gốc của bạn để xác nhận hành động.

Nếu bạn không có mật khẩu gốc (nếu bạn không phải là quản trị viên), có lẽ bạn nên làm việc với virtualenv và sau đó bạn nên bỏ sudo:

pip install [package_name] --upgrade

2
Như đã pip install --helpnói : -U, --upgrade Upgrade all specified packages to the newest available version.. Vì vậy, nó nên là trường hợp trên -U, không -u.
Peter Liang

25
Tại sao một tùy chọn phổ biến như vậy không được hiển thị khi bạn làm pip --helplà một câu đố với tôi ...
Husky

3
@Husky - Vâng, cùng một dòng, tại sao họ không thực hiện một upgradelệnh thực hiện những gì bạn thấy trong câu trả lời là một câu hỏi hay. (Có nghĩa là, nếu bạn sử dụng 'nâng cấp', nó chỉ đơn giản là làm những gì install+ --upgradelàm.) Một 'bí danh' sắp xếp.
bshea

10

Đối với gói không cụ thể và giải pháp tổng quát hơn, bạn có thể kiểm tra pip-review , một công cụ kiểm tra những gói nào có thể / nên được cập nhật.

$ pip-review --interactive
requests==0.14.0 is available (you have 0.13.2)
Upgrade now? [Y]es, [N]o, [A]ll, [Q]uit y

3
Mặc dù điều này không trả lời trực tiếp câu hỏi, nhưng nó có thể là điều mà một số người thực sự tìm kiếm khi họ tìm kiếm tin nhắn này.
borgr

8

tập lệnh tl; dr để cập nhật tất cả các gói đã cài đặt

Nếu bạn chỉ muốn nâng cấp một gói, hãy tham khảo câu trả lời của @ borgr . Tôi thường thấy cần thiết, hoặc ít nhất là làm hài lòng, để nâng cấp tất cả các gói của tôi cùng một lúc. Hiện tại, pip không thực sự hỗ trợ hành động đó, nhưng với kịch bản sh thì nó đủ đơn giản. Bạn sử dụng pip list, awk(hoặc cuttail) và thay thế lệnh. Một lớp lót bình thường của tôi là:

for i in $(pip list -o | awk 'NR > 2 {print $1}'); do sudo pip install -U $i; done

Điều này sẽ yêu cầu mật khẩu root. Nếu bạn không có quyền truy cập vào đó, --usertùy chọn piphoặc virtualenv có thể là một cái gì đó để xem xét.


7
import subprocess as sbp
import pip
pkgs = eval(str(sbp.run("pip3 list -o --format=json", shell=True,
                         stdout=sbp.PIPE).stdout, encoding='utf-8'))
for pkg in pkgs:
    sbp.run("pip3 install --upgrade " + pkg['name'], shell=True)

Lưu dưới dạng xx.py
Sau đó chạy Python3 xx.py
Môi trường: python3.5 + pip10.0 +


Tôi thích giải pháp này. Tôi đã thêm một bản in để hiển thị tên gói trong khi cập nhật:print('updating ', pkg['name'])
pvoj

4

Để nâng cấp pip cho Python3.4 +, bạn phải sử dụng pip3 như sau:

sudo pip3 install pip --upgrade

Điều này sẽ nâng cấp pip nằm ở: /usr/local/lib/python3.X/dist-packages

Mặt khác, để nâng cấp pip cho Python2.7, bạn sẽ sử dụng pip như sau:

sudo pip install pip --upgrade

Điều này sẽ nâng cấp pip nằm ở: /usr/local/lib/python2.7/dist-packages


7
Đây không phải là những gì OP yêu cầu. Anh ấy hỏi làm thế nào để nâng cấp một gói cụ thể, không phải bản thân PIP.
hạn

dù sao nó có vẻ hữu ích khi có ở đây trong số những câu trả lời khác
uhoh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.