簡體   English   中英

使用 pip 安裝特定的 package 版本

[英]Installing specific package version with pip

我正在嘗試安裝MySQL_python的 1.2.2 版本,使用通過--no-site-packages選項創建的新 virtualenv。 PyPi 中顯示的當前版本是1.2.3 有沒有辦法安裝舊版本? 我試過了:

pip install MySQL_python==1.2.2

但是,安裝后,它仍然在站點包中顯示MySQL_python-1.2.3-py2.6.egg-info 這是這個package特有的問題,還是我做錯了什么?

TL;博士

  • pip install -Iv (即pip install -Iv MySQL_python==1.2.2

這些選項的含義:

  • -I代表--ignore-installed它將忽略已安裝的軟件包,覆蓋它們。
  • -v表示詳細。 您可以組合更多的詳細信息(即-vv )最多 3 次(例如-Ivvv )。

有關詳細信息,請參閱pip install --help

首先,我發現您正在嘗試做的事情有兩個問題。 由於您已經安裝了版本,您應該卸載當前現有的驅動程序或使用pip install -I MySQL_python==1.2.2

但是,您很快就會發現這是行不通的。 如果您查看 pip 的安裝日志,或者執行pip install -Iv MySQL_python==1.2.2 ,您會發現 PyPI URL 鏈接不適用於 MySQL_python v1.2.2。 您可以在這里驗證這一點:http: //pypi.python.org/pypi/MySQL-python/1.2.2

由於 sourceforge.net 的最近升級和 PyPI 的舊 URL,下載鏈接 404 和后備 URL 鏈接無限重定向。

因此,要正確安裝驅動程序,您可以按照以下步驟操作:

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

您甚至可以通過pip install命令使用版本范圍。 像這樣的東西:

pip install 'stevedore>=1.3.0,<1.4.0'

如果軟件包已經安裝並且你想降級它添加--force-reinstall像這樣:

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

正如本文所建議的,一種方法是將pip中的版本提及為:

pip install -Iv MySQL_python==1.2.2

即使用==並提及版本號以僅安裝該版本。 -I, --ignore-installed忽略已安裝的軟件包。

要安裝特定的 python 包版本,無論是第一次、升級還是降級,請使用:

pip install --force-reinstall MySQL_python==1.2.4

MySQL_python 版本 1.2.2 不可用,所以我使用了不同的版本。 要從索引中查看所有可用的包版本,請排除版本:

pip install MySQL_python==

我相信如果你已經安裝了一個包,pip 不會用另一個版本覆蓋它。 使用-I忽略以前的版本。

有時,先前安裝的版本會被緩存。

~$ pip install pillow==5.2.0

它返回以下內容:
已滿足要求:/home/ubuntu/anaconda3/lib/python3.6/site-packages (5.2.0) 中的枕頭==5.2.0

我們可以使用 --no-cache-dir 和 -I 來覆蓋它

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

由於這似乎是 pip 版本 10 中引入的一項重大更改,因此我降級為兼容版本:

pip install 'pip<10' 

此命令告訴 pip 安裝低於版本 10 的模塊版本。在virutalenv中執行此操作,這樣您就不會搞砸 Python 的站點安裝。

以下命令對我有用

Python 版本 - 2.7

包 - python-jenkins

命令 - $ pip install 'python-jenkins>=1.1.1'

我最近在使用我想在某處記錄的pip-I標志時遇到了一個問題:

-在繼續之前-I不會卸載現有的包; 它只會將它安裝在舊的之上。 這意味着應該在版本之間刪除的任何文件都將保留在原處。 如果這些文件與其他已安裝的模塊共享名稱,這可能會導致奇怪的行為。

例如,假設有一個名為package的包。 package的文件之一中,他們使用import datetime 現在,在package@2.0.0中,這指向標准庫datetime模塊,但在package@3.0.0中,他們添加了本地datetime.py作為標准庫版本的替代品(無論出於何種原因)。

現在假設我運行pip install package==3.0.0 ,但后來意識到我實際上想要版本2.0.0 如果我現在運行pip install -I package==2.0.0舊的datetime.py文件將不會被刪除,因此任何對import datetime的調用都會導入錯誤的模塊。

就我而言,這表現為奇怪的語法錯誤,因為較新版本的包添加了一個僅與 Python 3 兼容的文件,當我將包版本降級以支持 Python 2 時,我繼續導入 Python-3-only 模塊。

基於此,我認為在更新已安裝的軟件包版本時,卸載舊軟件包總是比使用-I更可取。

有兩種方法可以安裝任何版本的軟件包:- A)。 pip install -Iv package-name == 版本B)。 pip install -v 包名 == 版本

為一個

在這里,如果您在安裝時使用 -I 選項(當您不知道軟件包是否已經安裝時)(例如 'pip install -Iv pyreadline == 2.* '或其他東西),您將安裝一個新的與具有某些不同版本的相同現有包的單獨包。

對於乙

  1. 首先,您可能想檢查是否有損壞的需求。 點檢查

2.然后通過pip list查看已經安裝的內容

3.如果軟件包列表包含您希望安裝特定版本的任何軟件包,那么更好的選擇是先卸載此版本的軟件包,通過pip uninstall package-name

4.現在您可以通過pip install -v package-name==version重新安裝具有特定版本的相同軟件包,例如 pip install -v pyreadline == 2.*

如果您想更新到最新版本並且您不知道可以鍵入的最新版本是什么。

pip install MySQL_python --upgrade

這將更新 MySQL_python 以獲得最新版本,您可以將其用於任何其他包版本。

依賴包有一個新版本,其中它從代碼庫中刪除了 LegacyVersion
快速解決方案可能是 pin packaging==21.3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM