Cài đặt phiên bản gói cụ thể với pip


1314

Tôi đang cố gắng cài đặt phiên bản 1.2.2 của bộ điều hợp MySQL_python, bằng cách sử dụng một virtualenv mới được tạo bằng --no-site-packagestùy chọn. Phiên bản hiện tại được hiển thị trong PyPi là 1.2.3 . Có cách nào để cài đặt phiên bản cũ hơn không? Tôi tìm thấy một bài báo nói rằng điều này nên làm điều đó:

pip install MySQL_python==1.2.2

Tuy nhiên, khi cài đặt, nó vẫn hiển thị MySQL_python-1.2.3-py2.6.egg-infotrong các gói trang web. Đây có phải là một vấn đề cụ thể đối với gói này, hoặc tôi đang làm gì đó sai?


17
Cảm ơn về gợi ý, điều này đã giúp tôi cài đặt phiên bản openpyxl cũ hơn thông quapip install MySQL_python==1.8.9
tim

4
Vâng, điều này cũng làm việc cho gấu trúc, cảm ơn:pip install -Iv pandas==0.12.0
tandy

1
cũng làm việc cho tôi: pip cài đặt xvfbwrapper == 0.2.4
amitdatta

Câu trả lời:


895

TL; DR:

  • pip install -Iv(tức là pip install -Iv MySQL_python==1.2.2)

Đầu tiên, tôi thấy hai vấn đề với những gì bạn đang cố gắng làm. Vì bạn đã có phiên bản đã cài đặt, bạn nên gỡ cài đặt trình điều khiển hiện tại hoặc sử dụngpip install -I MySQL_python==1.2.2

Tuy nhiên, bạn sẽ sớm phát hiện ra rằng điều này không hoạt động. Nếu bạn xem nhật ký cài đặt của pip hoặc nếu bạn làm như vậy, pip install -Iv MySQL_python==1.2.2bạn sẽ thấy rằng liên kết URL PyPI không hoạt động cho MySQL_python v1.2.2. Bạn có thể xác minh điều này tại đây: http://pypi.python.org/pypi/MySQL-python/1.2.2

Liên kết tải xuống 404 và các liên kết URL dự phòng đang chuyển hướng vô hạn do nâng cấp gần đây của sourceforge.net và URL cũ của PyPI.

Vì vậy, để cài đặt trình điều khiển đúng cách, bạn có thể làm theo các bước sau:

pip uninstall MySQL_python
pip install -Iv http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.2/MySQL-python-1.2.2.tar.gz/download

1
Không có vấn đề gì với việc có nhiều phiên bản, đó là điểm tạo thư mục mới cho mọi phiên bản và sử dụng tệp .pth.
Jochen Ritzel

3
Điều này cài đặt phiên bản chính xác vì vậy câu trả lời cho câu hỏi này - cảm ơn sự giúp đỡ của bạn. Hiện đang xử lý một vấn đề khác: "error: lệnh '/usr/bin/gcc-4.2' không thành công với trạng thái thoát 1" trong khi xây dựng tiện ích mở rộng '_mysql'. Tôi biết rằng tôi có GCC và quá trình cài đặt cho MySQL_python 1.2.3 diễn ra suôn sẻ. Những người khác đã thấy vấn đề này, cụ thể là với 1.2.2?
Joe

Làm một câu hỏi khác xin vui lòng và gửi thông báo lỗi mà bạn nhận được từ pip.
Mahmoud Abdelkader

2
Chắc chắn - đây là liên kết: stackoverflow.com/questions/5226945/ Kẻ
Joe

4
Tò mò tại sao bạn sử dụng tùy chọn -I nếu chúng tôi đã gỡ cài đặt hiện tại - bạn có thể cung cấp một số chi tiết về điều đó không?
Joe

509

Bạn thậm chí có thể sử dụng một phạm vi phiên bản với pip installlệnh. Một cái gì đó như thế này:

pip install 'stevedore>=1.3.0,<1.4.0'

Và nếu gói đã được cài đặt và bạn muốn hạ cấp thì hãy thêm --force-reinstallnhư thế này:

pip install 'stevedore>=1.3.0,<1.4.0' --force-reinstall

129
ví dụ: $ pip install 'xkcdpass==1.2.5' --force-reinstall
jschank

1
hoàn hảo! đã chạy trên Ubunto 15.04 và nó (tự động) đã thay thế một thư viện hiện có với phiên bản được chỉ định. Giải quyết tất cả các vấn đề của tôi!
zevij

2
Chỉ cần đề cập rằng đối với Python 2, tôi đã phải sử dụng dấu ngoặc kép "thay vì '
Prime_Aqasix

6
@ HandofC'thuhlu tôi nghĩ rằng chúng ta phải sử dụng dấu ngoặc kép cho windows chứ không phải python 2
SmartManoj

3
Sử dụng dấu ngoặc kép trên Windows: cài đặt pip "stevedore> = 1.3.0, <1.4.0"
jmng

139

Một cách, như được đề xuất trong bài viết này , là đề cập đến phiên bản pipnhư:

pip install -Iv MySQL_python==1.2.2

tức là sử dụng ==và đề cập đến số phiên bản để chỉ cài đặt phiên bản đó. -I, --ignore-installedbỏ qua các gói đã cài đặt.


1
Coi chừng! Tôi đã có kinh nghiệm rằng điều này đã cài đặt các phiên bản khác nhau cạnh nhau ! Cũng thú vị, pip listkhông biết điều đó, nhưng conda listđã (và sẽ hiển thị các phiên bản gói khác nhau). Nó cũng hoàn toàn nhầm lẫn Pycharm .
Lionel Trebuchon

66

Để cài đặt phiên bản gói python cụ thể cho dù đó là lần đầu tiên, sử dụng nâng cấp hoặc hạ cấp:

pip install --force-reinstall MySQL_python==1.2.4

MySQL_python phiên bản 1.2.2 không có sẵn nên tôi đã sử dụng một phiên bản khác. Để xem tất cả các phiên bản gói có sẵn từ một chỉ mục loại trừ phiên bản:

pip install MySQL_python==

4
Với pip 10.0.1, đây là giải pháp làm việc duy nhất. Tùy chọn "-I" thực sự cài đặt lại phiên bản trước.
FedFranzoni

38

Tôi tin rằng nếu bạn đã cài đặt một gói, pip sẽ không ghi đè lên nó bằng phiên bản khác. Sử dụng -Iđể bỏ qua các phiên bản trước.


1
Tôi chưa cài đặt nó - sử dụng một virtualenv mới được tạo bằng tùy chọn --no-site-gói
Joe

2
được rồi, vậy bạn hỏi phiên bản 1.2.2 và nó vẫn cài đặt 1.2.3, và không có gì khác được cài đặt? Cú pháp bạn sử dụng là chính xác để có được các phiên bản cụ thể.
dappawit

"Sử dụng một virtualenv mới được tạo bằng tùy chọn --no-site-gói"; bạn có thể cần phải thực hiện điều này bằng lệnh unset PYTHONPATHđể không pipnhìn thấy các thư viện được cài đặt sẵn của mình
user5359531

17

Đôi khi, phiên bản cài đặt trước đó được lưu trữ.

~$ pip install pillow==5.2.0

Nó trả về các nội dung sau:
Yêu cầu đã được thỏa mãn: gối == 5.2.0 trong /home/ubfox/anaconda3/lib/python3.6/site-packages (5.2.0)

Chúng ta có thể sử dụng --no-cache-dir cùng với -I để ghi đè lên điều này

~$ pip install --no-cache-dir -I pillow==5.2.0

5

Vì đây có vẻ là một thay đổi đột phá được giới thiệu trong phiên bản 10 của pip, tôi đã hạ cấp xuống phiên bản tương thích:

pip install 'pip<10' 

Lệnh này yêu cầu pip cài đặt phiên bản mô-đun thấp hơn phiên bản 10. Thực hiện việc này trong virutalenv để bạn không cài đặt Python trang web của mình.


5

Gần đây tôi đã chạy vào một vấn đề khi sử dụng pip's -Icờ mà tôi muốn đến một nơi nào tài liệu:

-Isẽ không gỡ cài đặt gói hiện có trước khi tiến hành; nó sẽ chỉ cài đặt nó trên cái cũ. Điều này có nghĩa là bất kỳ tệp nào sẽ bị xóa giữa các phiên bản thay vào đó sẽ được giữ nguyên vị trí. Điều này có thể gây ra hành vi kỳ lạ nếu những tệp đó chia sẻ tên với các mô-đun được cài đặt khác.

Ví dụ: giả sử có một gói có tên package. Trong một trong packagecác tập tin, họ sử dụng import datetime. Bây giờ, trong package@2.0.0, điều này trỏ đến datetimemô-đun thư viện tiêu chuẩn , nhưng trong package@3.0.0, họ đã thêm một cục bộ datetime.pythay thế cho phiên bản thư viện tiêu chuẩn (vì bất kỳ lý do gì).

Bây giờ hãy nói rằng tôi chạy pip install package==3.0.0, nhưng sau đó nhận ra rằng tôi thực sự muốn phiên bản 2.0.0. Nếu bây giờ tôi chạy pip install -I package==2.0.0, tệp datetime.pysẽ không bị xóa, vì vậy mọi cuộc gọi đếnimport datetime sẽ nhập sai mô-đun.

Trong trường hợp của tôi, điều này biểu hiện với các lỗi cú pháp lạ vì phiên bản mới hơn của gói đã thêm một tệp chỉ tương thích với Python 3 và khi tôi hạ cấp các phiên bản gói để hỗ trợ Python 2, tôi tiếp tục nhập mô-đun chỉ có Python-3.

Dựa trên điều này, tôi sẽ lập luận rằng việc gỡ cài đặt gói cũ luôn được ưu tiên sử dụng -Ikhi cập nhật các phiên bản gói đã cài đặt.


3

Lệnh dưới đây làm việc cho tôi

Phiên bản Python - 2.7

gói - python-jenkins

chỉ huy - $ pip install 'python-jenkins>=1.1.1'


Kính gửi downvoter, Xin vui lòng biện minh tại sao câu trả lời này bị bỏ qua?
Tapan Hegde

Tôi đã không downvote, nhưng có thể thấy rằng điều này không trả lời câu hỏi cũng như không cung cấp bất kỳ thông tin hữu ích nào mà OP có thể sử dụng để giải quyết vấn đề.
TheAmigo

0

Có 2 cách bạn có thể cài đặt bất kỳ gói nào với phiên bản: - A). cài đặt pip -Iv tên gói == phiên bản B). cài đặt pip -v tên gói == phiên bản

Cho một

Ở đây, nếu bạn đang sử dụng tùy chọn -I trong khi cài đặt (khi bạn không biết gói đã được cài đặt chưa) (như 'pip install -Iv pyreadline == 2. *' hoặc thứ gì đó), bạn sẽ cài đặt mới gói riêng với cùng một gói hiện có một số phiên bản khác nhau.

Đối với B

  1. Lúc đầu, bạn có thể muốn kiểm tra không có yêu cầu bị hỏng. kiểm tra pip

2.và sau đó xem những gì đã được cài đặt bởi danh sách pip

3. nếu danh sách các gói chứa bất kỳ gói nào bạn muốn cài đặt với phiên bản cụ thể thì tùy chọn tốt hơn là gỡ cài đặt gói của phiên bản này trước, bởi gỡ cài đặt tên gói

4. Và bây giờ bạn có thể tiếp tục cài đặt lại cùng một gói với một phiên bản cụ thể, bằng cách cài đặt pip -v gói-name == phiên bản, ví dụ: pip install -v pyreadline == 2. *


0

Nếu bạn muốn cập nhật lên phiên bản mới nhất và bạn không biết phiên bản mới nhất bạn có thể nhập là gì.

Pip cài đặt MySQL_python - nâng cấp

Điều này sẽ cập nhật MySQL_python cho phiên bản mới nhất có sẵn, bạn có thể sử dụng cho bất kỳ phiên bản gói nào khác.

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.