2010-12-27 36 views
228

Tôi đang sử dụng pip với một tập tin yêu cầu, trong một 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, đặc biệt là bản thân Django và tôi gặp phải lỗi về xung đột mã nguồn:Làm cách nào để nâng cấp các gói cụ thể bằng pip và tệp yêu cầu?

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

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. 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ải xuống toàn bộ gói. Tôi thậm chí đã thử chạy một lệnh gỡ cài đặt trước, sau đó cài đặt nhưng không có con xúc xắc. Có lẽ tôi đang thiếu một cái gì đó?

+0

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 tùy thuộc vào. –

Trả lời

25

Tôi không chắc đó có phải là vấn đề của bạn hay 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 thành với 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 lấy ra <virtualenv>/build/Django thư mục và cuối cùng tôi được cài đặt đúng phiên bản với:

<virtualenv>/bin/pip install Django 

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

776

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

pip install Django --upgrade 

Shortcut để nâng cấp:

pip install Django -U 

Note: nếu gói bạn đang nâng cấp có bất kỳ yêu cầu lệnh này sẽ bổ sung nâng cấp tất cả các yêu cầu cho các phiên bản mới nhất có sẵn. Trong các phiên bản pip gần đây, you can prevent this behavior by specifying --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 được nâng cấp.

+7

Điều này cho tôi cập nhật tất cả mọi thứ đóng gói và hoàn toàn sai lầm của tôi !!!! Tài liệu tuyên bố: - upgrade tất cả các gói lên phiên bản mới nhất có sẵn. Đ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 đã thực hiện các yêu cầu 'pip install --upgrade' và * only *" đã đượ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

+24

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

2

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

  1. Bạn đã sử dụng --no-install tùy chọn
  2. Bạn đang sử dụng các gói có thể chỉnh sửa
  3. Quá trình cài đặt đã bị hủy bỏ hoặc nói cách khá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ó thư mục build làm tắc nghẽn môi trường của bạn.

23

Lệnh tắt cho --upgrade:

pip install Django --upgrade 

là:

pip install Django -U 
+3

Cách chỉnh sửa câu trả lời hiện có để thêm bit thông tin này thay vì câu trả lời (chưa hoàn thành)? – a1an

+0

@ a1an vui lòng đề xuất thông tin bổ sung nào bạn cho rằng nên được thêm vào "bản chỉnh sửa được đề xuất". Cảm ơn –

+2

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

31

theo pip docs 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ó. ví dụ:

Giả sử bạn muốn nâng cấp somepackage yêu cầu django >= 1.2.4 sử dụng phương pháp này, nó cũng sẽ nâng cấp somepackagedjango lên bản cập nhật mới nhất. Chỉ cần để được an toàn do:

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

Việc làm này sẽ nâng cấp somepackage và giữ django để 1.2.4 phiên bản

5

Nếu bạn chỉ muốn nâng cấp một gói cụ thể gọi là 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 

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

4

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

Cách thuận tiện để thực hiện việc này là sử dụng pip-upgrader cũng cập nhật các phiên bản này trong tệp requirements.txt của bạn cho các gói đã chọn (hoặc tất cả các gói).

Lắp đặt

pip install pip-upgrader 

Cách sử dụng

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

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í phi tiêu chuẩn, gửi cho họ như các đối số:

pip-upgrade path/to/requirements.txt 

Nếu bạn đã biết bạn muốn nâng cấp gói nào, chỉ cần gửi chúng làm đố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 trước khi phát hành/sau khi phát hành, hãy thêm --prerelease đối số cho lệnh của bạn.

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

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