[英]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.* '或其他東西),您將安裝一個新的與具有某些不同版本的相同現有包的單獨包。
對於乙
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.