Làm cách nào tôi có thể nâng cấp các gói cụ thể bằng pip và tệp yêu cầu?


436

Tôi đang sử dụng pip với tệp yêu cầu, trong virtualenv, cho các dự án Django của tôi. Tôi đang cố gắng nâng cấp một số gói, đáng chú ý là chính Django và tôi đang gặp lỗi về xung đột mã nguồn:

Source in `<virtualenv`>/build/Django has version 1.2.3 that conflicts with Django==1.2.4 (from -r requirements/apps.txt (line 3))

Đó là sau khi cập nhật số phiên bản của Django từ 1.2.3 đến 1.2.4 trong tệp yêu cầu của tôi. Tôi đang sử dụng lệnh này để thực sự nâng cấp:

pip --install --upgrade -E `<virtualenv dir`> --requirement `<requirements file`>

Tôi không thể tìm thấy bất kỳ cờ nào kích hoạt tổng số gói tải xuống lại. Tôi thậm chí đã thử chạy lệnh gỡ cài đặt trước, sau đó cài đặt nhưng không có xúc xắc. Có lẽ tôi đang thiếu một cái gì đó?


1
Vui lòng kiểm tra câu trả lời của @ dr-jimbob vì các phiên bản gần đây của pip sẽ thực sự nâng cấp tất cả các phụ thuộc khác mà gói bạn đang nâng cấp phụ thuộc vào.
Lokesh Meher

Câu trả lời:


61

Tôi không chắc đó có phải là vấn đề chính xác của bạn không, nhưng trong trường hợp của tôi, tôi không thể nâng cấp Django lên 1.2.4 - Tôi luôn hoàn thiện phiên bản 1.2.3, vì vậy tôi đã gỡ cài đặt Django bằng:

<virtualenv>/bin/pip uninstall Django

Sau đó, tôi xóa <virtualenv>/build/Djangothư mục và cuối cùng tôi đã cài đặt phiên bản thích hợp với:

<virtualenv>/bin/pip install Django

Hy vọng điều này sẽ giúp.


53
Đây không phải là thực hành tốt nhất. Sử dụng pip install Django -Uhoặc pip install Django --upgradenhư được mô tả trong câu trả lời của @JoeyG.
Ahmad

@Ahmad đồng ý. Cần có một quá trình cập nhật suôn sẻ trong pip và env ảo.
Parth Joshi

1270

Tôi đã chạy lệnh sau và nó đã nâng cấp từ 1.2.3 lên 1.4.0

pip install Django --upgrade

Phím tắt để nâng cấp:

pip install Django -U

Lưu ý : nếu gói bạn đang nâng cấp có bất kỳ yêu cầu nào, lệnh này sẽ nâng cấp thêm tất cả các yêu cầu lên phiên bản mới nhất hiện có. Trong các phiên bản gần đây của pip, bạn có thể ngăn chặn hành vi này bằng cách chỉ định--upgrade-strategy only-if-needed . Với cờ đó, các phụ thuộc sẽ không được nâng cấp trừ khi các phiên bản đã cài đặt của các gói phụ thuộc không còn đáp ứng các yêu cầu của gói nâng cấp.


7
Điều này cho tôi cập nhật tất cả các gói của tôi và hoàn toàn làm rối tung mọi thứ !!!! Tài liệu nêu rõ: - nâng cấp tất cả các gói lên phiên bản mới nhất hiện có. Điều này đúng hay tôi đã làm gì sai?
Prometheus

4
@OrbiterFleet Tôi cần cập nhật "yêu cầu" vì vậy tôi đã làm pip install Requests --upgradechỉ "yêu cầu" được nâng cấp. Mô tả cho biết "nâng cấp tất cả các gói được chỉ định " khi tôi xem tài liệu.
harperville

31
CHÚ Ý, nó cũng cập nhật tất cả các phụ thuộc và có thể gây rối với mọi thứ. lựa chọn tốt nhất là gỡ cài đặt và cài đặt lại gói.
marcelosalloum

3
để nâng cấp sử dụng gói cụ thểpip install --upgrade django==1.4.0
whale_steward

đây phải là câu trả lời đúng theo câu hỏi hoặc chính câu hỏi đó là sai.
int soumen

51

theo tài liệu pip ví dụ 3

pip install --upgrade django

nhưng dựa trên kinh nghiệm của tôi, sử dụng phương pháp này cũng sẽ nâng cấp bất kỳ gói nào liên quan đến nó. thí dụ:

Giả sử bạn muốn nâng cấp somepackageyêu cầu django >= 1.2.4sử dụng loại phương pháp này, nó cũng sẽ nâng cấp somepackagedjangolên bản cập nhật mới nhất. Để an toàn, hãy làm:

# assume you want to keep django 1.2.4
pip install --upgrade somepackage django==1.2.4

Làm điều này sẽ nâng cấp somepackagevà giữ django lên phiên bản 1.2.4


Bắt tốt nhưng giải thích của bạn là khó hiểu kể từ khi bạn bắt đầu với djangotư cách là một gói chính sau đó trong ví dụ bạn sử dụng somepackagevà sau đó sử dụng djangonhư một phụ thuộc.
Dài

34

Lệnh tắt cho --upgrade:

pip install Django --upgrade

Là:

pip install Django -U

7
Làm thế nào về việc chỉnh sửa câu trả lời hiện có để thêm chút thông tin này thay vì câu trả lời (không đầy đủ)?
a1an

@ a1an vui lòng đề xuất những thông tin bổ sung mà bạn nghĩ nên được thêm vào trong "chỉnh sửa được đề xuất". Cảm ơn
Aaron Lelevier

4
Ý tôi là bạn có thể chỉnh sửa câu trả lời do JoeyG đưa ra, thêm tùy chọn phím tắt bạn cung cấp trong ngữ cảnh ở đó.
a1an

17

Nếu bạn nâng cấp một gói, gói cũ sẽ được gỡ cài đặt.

Một cách thuận tiện để làm điều này là sử dụng trình nâng cấp này cũng cập nhật các phiên bản trong requirements.txttệp của bạn cho các gói đã chọn (hoặc tất cả các gói).

Cài đặt

pip install pip-upgrader

Sử dụng

Kích hoạt virtualenv của bạn (quan trọng, vì nó cũng sẽ cài đặt các phiên bản mới của các gói được nâng cấp trong virtualenv hiện tại).

cd vào thư mục dự án của bạn, sau đó chạy:

pip-upgrade

Sử dụng nâng cao

Nếu các yêu cầu được đặt ở vị trí không chuẩn, hãy gửi chúng dưới dạng đối số:

pip-upgrade path/to/requirements.txt

Nếu bạn đã biết gói nào bạn muốn nâng cấp, chỉ cần gửi chúng dưới dạng đối số:

pip-upgrade -p django -p celery -p dateutil

Nếu bạn cần nâng cấp lên phiên bản tiền phát hành / sau phát hành, hãy thêm --prereleaseđối số vào lệnh của bạn.

Tiết lộ đầy đủ: tôi đã viết gói này. Hy vọng nó giúp.


1
Có một tùy chọn để nâng cấp tất cả các gói cùng một lúc (nghĩa là không liệt kê chúng) với phương pháp này không?
Người hâm mộ số một của Bjork

1
@MikePalmice có: pip-upgrade -p allsẽ nâng cấp tất cả các gói của bạn và cập nhật tệp yêu cầu mà không cần bất kỳ đầu vào nào từ bạn.
Simion Agavriloaei

15

Nếu bạn chỉ muốn nâng cấp một gói cụ thể được gọi somepackage, lệnh bạn nên sử dụng trong các phiên bản gần đây của pip là

pip install --upgrade --upgrade-strategy only-if-needed somepackage

Điều này rất hữu ích khi bạn phát triển một ứng dụng trong django hiện chỉ hoạt động với một phiên bản django cụ thể (giả sử Django = 1.9.x) và muốn nâng cấp một số gói phụ thuộc với tính năng sửa lỗi / mới và gói nâng cấp phụ thuộc trên django (nhưng hoạt động với bất kỳ phiên bản nào của django sau 1.5). Hành vi mặc định của pip install --upgrade django-some-packagesẽ là nâng cấp django lên phiên bản mới nhất có thể phá vỡ ứng dụng của bạn, mặc dù với các --upgrade-strategy only-if-neededgói phụ thuộc giờ đây sẽ chỉ được nâng cấp khi cần thiết.


4

Thông thường, pip sẽ tự dọn sạch và xóa nội dung của thư mục build. Lần duy nhất nó không làm điều này là nếu:

  1. Bạn đã sử dụng --no-installtùy chọn
  2. Bạn đang sử dụng các gói có thể chỉnh sửa
  3. Việc cài đặt đã bị hủy hoặc bị gián đoạn.

Trong tất cả các trường hợp khác, bạn không nên có buildthư mục làm tắc nghẽn môi trường của bạn.


1

Việc xác định phiên bản cụ thể để nâng cấp giúp tôi thay vì chỉ nâng cấp lệnh.

pip3 install larapy-installer==0.4.01 -U

0

đã giải quyết cho tôi vấn đề "cài đặt pip -I - nâng cấp psutil - Force" sau đó chỉ cần gỡ cài đặt psutil với phiên bản mới và hy vọng bạn có thể đột nhiên cài đặt phiên bản cũ hơn (:


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.