2010-05-18 34 views
38

Tôi đang sử dụng pip và virtualenv cho ứng dụng python của mình. Tôi muốn nâng cấp lên phiên bản mới của ứng dụng mà không cần chạm vào các phụ thuộc. Khi tôi sử dụng pip install -U, nó cố gắng nâng cấp tất cả các gói và thậm chí gỡ cài đặt và cài đặt lại cùng một phiên bản của gói phụ thuộc khi không có phiên bản mới.Gói nâng cấp mà không nâng cấp phụ thuộc bằng pip?

Tôi cũng đã thử pip install -U --no-deps nhưng điều đó có vẻ tương đương với cài đặt thông thường thay vì nâng cấp. Có một sự kết hợp của cờ sẽ làm những gì tôi muốn?

+0

câu hỏi hay. Tôi liên kết chéo http://stackoverflow.com/questions/2875232/list-python-package-dependencies-without-loading-them - nếu bạn thậm chí không thể liệt kê các phụ thuộc trước thời hạn, có vẻ như bạn đang bị kẹt. – denis

Trả lời

43

Tôi vừa thử trên dự án virtualenv của mình và pip install -U --no-deps mypackage dường như hoạt động tốt. Nó chỉ tải về mypackage và không có gì khác. Thiết lập của bạn như thế nào?

+0

Sự nhầm lẫn của tôi xuất phát từ sự khác biệt về hành vi khi bạn cho pip một tarball cụ thể so với tên gói. Carl Meyer đã có một lời giải thích hữu ích: http://groups.google.com/group/python-virtualenv/msg/d702c251a6dc40a5 –

+0

Tôi khuyên bạn nên chạy 'pip check' sau đó để kiểm tra xem có bất kỳ vấn đề nào bị thiếu phụ thuộc của phụ thuộc hay không. – Flimm

4

Bạn nói đúng. Tôi nghĩ rằng khi tôi thêm --no-deps nó đã bị bỏ quên để gỡ cài đặt phiên bản hiện tại. Nhưng tôi đã thử nó một lần nữa và thấy không có vấn đề:

$ pip install -U --no-deps myproj 
Downloading/unpacking myproj 
    Downloading myproj-1.0-trunk.31072.tar.gz (43Kb): 43Kb downloaded 
    Running setup.py egg_info for package myproj 
Installing collected packages: myproj 
    Found existing installation: myproj 1.0-trunk.31053 
    Uninstalling myproj: 
     Successfully uninstalled myproj 
    Running setup.py install for myproj 
Successfully installed myproj 
Cleaning up... 
25

CẬP NHẬT (nhờ @ của Giê-the comment): Nếu bạn đang sử dụng phiên bản mới nhất của pip, sau đó cập nhật phụ thuộc chỉ khi cần thiết bây giờ là mặc định hành vi, và bạn không cần phải làm bất cứ điều gì đặc biệt! Câu trả lời dưới đây vạch ra các bước cho các phiên bản cũ hơn của pip (cũng hoạt động cho các phiên bản mới hơn nếu bạn muốn di động).

Nếu bạn thực sự muốn không chạm vào phụ thuộc, sau đó thực sự là con đường để đi là

pip install -U --no-deps mypackage 

Nhưng tôi nghĩ rằng những gì bạn thường sẽ muốn là để không nâng cấp phụ thuộc trừ khi nó được yêu cầu. Trong trường hợp đó, bạn có thể sử dụng:

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

Chỉ cập nhật yêu cầu nếu gói này yêu cầu phiên bản mới hơn cài đặt.

+0

Đây là chiến lược mặc định mới trong pip: https://github.com/pypa/pip/pull/4500 – Jether

+0

LoL, tôi chỉ sao chép một cách mù quáng lệnh từ câu trả lời và nó thực sự đã cài đặt một số ['mypackage'] (https : //pypi.python.org/pypi/Mypackage/0.1) vào trăn của tôi. – ImportanceOfBeingErnest

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