Làm cách nào để cập nhật gói Python?


234

Tôi đang chạy Ubuntu 9:10 và gói có tên M2Crypto đã được cài đặt (phiên bản là 0.19.1). Tôi cần tải xuống, xây dựng và cài đặt phiên bản mới nhất của gói M2Crypto (0.20.2).

Gói 0.19.1 có các tệp ở một số vị trí bao gồm (/ usr / share / py Shared và /usr/lib/pymodules.python2.6).

Làm cách nào tôi có thể gỡ cài đặt hoàn toàn phiên bản 0.19.1 khỏi hệ thống của mình trước khi cài đặt 0.20.2?

Câu trả lời:


54

Bạn có thể muốn xem xét một trình quản lý gói Python như pip . Nếu bạn không muốn sử dụng trình quản lý gói Python, bạn sẽ có thể tải xuống M2Crypto và xây dựng / biên dịch / cài đặt qua cài đặt cũ.


1
Cảm ơn. Những gì bạn nói đã làm việc. Tôi đã xây dựng và cài đặt 0.20.2 mà không cần gỡ cài đặt 0.19.1.
trộm

461

Cách tốt nhất tôi tìm thấy là chạy lệnh này từ terminal

sudo pip install [package_name] --upgrade

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.


Lưu ý: Một số người dùng có thể đã cài đặt pip3 thay thế. Trong trường hợp đó, sử dụng

sudo pip3 install [package_name] --upgrade

4
Và nếu bạn đang sử dụng proxy mà không cần xác thực: sudo pip install [gói] --upTHER --proxy = address: port
lmsasu

31
Tôi đến đây vì câu trả lời này. Tôi đã thử pip updatepip upgradetuyệt vọng cho đến khi tôi thấy --upgradeở đây. Tại sao họ không thêm một pip upgradelệnh?
Lars Blumberg

9
Đây thực sự là một tính năng được giấu kín.
otocan

1
Đối với người dùng Windows: sudokhông bắt buộc.
Stevoisiak

2
Đây phải là câu trả lời số 1
Cord Kaldemeyer 16/07/18

48

Để tự động nâng cấp tất cả các gói lỗi thời (đã được cài đặt bằng pip), chỉ cần chạy đoạn mã dưới đây,

pip install $(pip list --outdated | awk '{ print $1 }') --upgrade

Ở đây, pip list --outdatedsẽ liệt kê tất cả các gói hết hạn và sau đó chúng tôi chuyển nó sang awk, vì vậy nó sẽ chỉ in tên. Sau đó, $(...)sẽ làm cho nó một biến và sau đó, mọi thứ được thực hiện tự động. Hãy chắc chắn rằng bạn có quyền. (Chỉ cần đặt sudotrước pip nếu bạn bối rối) Tôi sẽ viết một tập lệnh có tên, pip-upgrade Mã dưới đây,

#!/bin/bash
sudo pip install $(pip list --outdated | awk '{ print $1 }') --upgrade

Sau đó sử dụng các dòng script sau đây để chuẩn bị nó:

sudo chmod +x pip-upgrade
sudo cp pip-upgrade /usr/bin/

Sau đó, chỉ cần nhấn pip-upgradevà voila!


tôi đã gặp lỗi cú pháp trỏ đến dấu ngoặc cuối cùng trong:awk: cmd. line:1: { print $1 })
TT--

7
@TT Phiên bản mới hơn của pip yêu cầu bạn sử dụng --format=legacytùy chọn, nghĩa là pip list --outdated --format=legacy. Ngoài ra tất cả mọi người FYI: cập nhật mù quáng tất cả các mô-đun qua pip có thể khá nguy hiểm trên nhiều bản phát hành Linux. Nhiều người trong số họ cung cấp các mô-đun python cụ thể thông qua các gói phân phối và một số phân phối đó (đặc biệt là RHEL) có thể bị hỏng nếu bạn cập nhật shit ... không đề cập đến thực tế là nếu bạn cập nhật qua pip, các gói phân phối có thể hoàn nguyên các thay đổi của bạn trên một bản cập nhật trong tương lai.
rsaw

cảm ơn @rsaw. Anh ấy đúng, bạn nên chạy các lệnh pip của mình với tùy chọn --user
Fahim Ferdous 15/03/18

1
Tôi thích câu trả lời này, mặc dù tôi hiểu sự nguy hiểm trong việc cập nhật mọi thứ tự động. Dù sao, vì di sản không được chấp nhận trong pip 19.0 pip cài đặt $ (danh sách pip --outdated --format = cột | grep -v "Gói" | grep -v - ---- | awk '{print $ 1}') - -cung cấp
mike v

2
Để hoạt động trên Ubuntu 18.04 venv thích ứng như sau:pip install $(pip list --outdated | tail +3 | grep -v sdist | awk '{ print $1 }') --upgrade
Alexander Remesch

34
  1. Thông qua dấu nhắc lệnh windows, chạy: pip list --outdated Bạn sẽ nhận được danh sách các gói lỗi thời.
  2. Chạy: pip install [package] --upgrade Nó sẽ nâng cấp [package]và gỡ cài đặt phiên bản trước.

Để cập nhật pip:

py -m pip install --upgrade pip

Một lần nữa, điều này sẽ gỡ cài đặt phiên bản trước của pip và sẽ cài đặt phiên bản mới nhất của pip.


29
  • Phương pháp 1: Nâng cấp thủ công từng cái một

pip install package_name -U
  • Phương pháp 2: Nâng cấp tất cả cùng một lúc (rollback cơ hội cao nếu một số gói không nâng cấp

pip install $(pip list --outdated --format=columns |tail -n +3|cut -d" " -f1) --upgrade
  • Phương pháp 3: Nâng cấp từng cái một bằng cách sử dụng vòng lặp

for i in  $(pip list --outdated --format=columns |tail -n +3|cut -d" " -f1); do pip install $i --upgrade; done

11

Tôi nghĩ rằng một trong những lót tốt nhất là:

pip install --upgrade <package>==<version>

9

Sử dụng đường ống !

$ pip install pipupgrade
$ pipupgrade --latest --interactive

PipupTHER giúp bạn nâng cấp hệ thống, địa phương hoặc các gói từ một requirements.txttệp! Nó cũng chọn lọc nâng cấp các gói không phá vỡ sự thay đổi. Tương thích với Python2.7 +, Python3.4 + và pip9 +, pip10 +, pip18 +.

nhập mô tả hình ảnh ở đây

LƯU Ý: Tôi là tác giả của công cụ.


1
Bất cứ khi nào tôi sử dụng công cụ này, tôi nhận được phản hồi "[0; 93mKiểm tra ... [0m" và nó không tiến hành gì cả. Tôi đang sử dụng nó không đúng?
Bạo lực

Tôi sử dụng máy Mac với MacPorts. Với Python 3.7 pipupTHER chỉ hoạt động cho 5 trên 50 gói, phần còn lại tôi phải sử dụng cái này: for i in pip3.7 list --outdated | sed -n -e '3,$s/ .*//p'; cài đặt pip3.7 - nâng cấp $ i; xong
Michael Dreher

4

Gói ban đầu được cài đặt như thế nào? Nếu đó là thông qua apt, bạn có thể làm đượcapt-get remove python-m2crypto

Nếu bạn đã cài đặt nó qua easy_install, tôi chắc chắn cách duy nhất là chỉ rác các tệp theo lib, được chia sẻ, v.v.

Đề nghị của tôi trong tương lai? Sử dụng một cái gì đó như pip để cài đặt các gói của bạn. Hơn nữa, bạn có thể tra cứu một thứ gọi là virtualenv để các gói của bạn được lưu trữ trên cơ sở theo từng môi trường, thay vì chỉ dựa trên root.

Với pip, thật dễ dàng:

pip install m2crypto

Nhưng bạn cũng có thể cài đặt từ repos git, svn, vv với đúng địa chỉ. Tất cả điều này được giải thích trong tài liệu pip


Cách anh mô tả nơi các tệp được cài đặt chỉ ra rằng gói đã được cài đặt bằng trình quản lý gói apt - bởi vì (trên Debian AFAIK) apt sẽ cài đặt các gói python theo 2 vị trí anh liệt kê - / share / py Shared / .. dành cho mã được chia sẻ trên các phiên bản và / usr / lib / .. cho các phần cụ thể của phiên bản. mặt khác, easy-install / pip sẽ sử dụng / usr / local / lib / .. - như bạn đã nói - chỉ cần gỡ bỏ apt-get sẽ thực hiện được anh ta.
Basel Shishani


3

Trong máy tính xách tay Juptyer, một cách rất đơn giản là

!pip install <package_name> --upgrade

Vì vậy, bạn chỉ cần thay thế bằng tên gói thực tế.


2

Nhận tất cả các gói đã lỗi thời và tạo một tệp bó với các lệnh sau đây pip cài đặt xxx - nâng cấp cho mỗi gói lỗi thời

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.