2013-06-20 16 views
8

Câu hỏi của tôi rất giống với câu hỏi this. Nhưng nó khác trong một cách mà nếu tôi đang cài đặt một số gói tôi chỉ muốn vô hiệu hóa nâng cấp cho một phụ thuộc cụ thể không cho tất cả các phụ thuộc. Tôi biết có một lá cờ --no-deps nhưng nó sẽ loại trừ tất cả sự phụ thuộc thay vì tôi chỉ muốn loại trừ một.pip: gói nâng cấp mà không nâng cấp phụ thuộc cụ thể

Dưới đây là một kịch bản:

  • Tôi có Django 1,4 cài đặt
  • Tôi đã django-rosetta cài đặt

Dưới đây là django-rosetta phụ thuộc vào mới nhất build:

install_requires=[ 
    'six >=1.2.0', 
    'Django >= 1.3' 
] 

Bây giờ tôi muốn nâng cấp rosetta pip install -U django-rosetta . Nhưng nó đã cố gắng để tải xuống và cài đặt Django 1.5 vì phụ thuộc rosetta Django >= 1.3 là bắt buộc (và tôi không muốn nó làm điều này như Django 1.4 đã được cài đặt) Tôi chỉ muốn nâng cấp gói six nếu có.

--no-deps cờ sẽ không hoạt động vì nó cũng sẽ loại trừ gói six. Ngoài ra tôi không sử dụng môi trường ảo. Bất kỳ đề nghị xin vui lòng?

+0

Trong ví dụ Pip cố gắng để cài đặt 'Django 1,5', đây có phải là vì «Django 1.4' không được cài đặt bằng pip? –

Trả lời

18

này hoạt động và cho phép bạn được chính xác hơn:

pip install -U django-rosetta Django==1.4 
+1

Thật vậy. – slumtrimpet

7

Tạo một file yêu cầu requirement.txt chứa:

Django==1.4 

sau đó

pip install -U django-rosetta -r requirement.txt 
+0

Nhưng nếu tôi làm theo cách tiếp cận này, nó sẽ nâng cấp phần còn lại của các gói (ngoài Django) trong tệp requirements.txt. –

+0

Vâng, có lẽ tôi đã không hiểu câu hỏi của bạn, nhưng bạn đã yêu cầu một cách để ngăn chặn nâng cấp một số gói cụ thể (Django) trong khi nâng cấp mọi thứ khác ... những gì tôi nói là tập tin yêu cầu có thể được sử dụng để chặn những các gói cụ thể được nâng cấp và cho phép nâng cấp pip khác. – Guillaume

+0

Chỉ cần kiểm tra và nó sẽ làm việc với tệp 'requirements.txt' nếu bạn giữ số phiên bản cũng cho mọi gói. –