使用 pip 安装特定包版本

Installing specific package version with pip

提问人:Joe 提问时间:3/8/2011 最后编辑:questionto42Joe 更新时间:12/29/2022 访问量:2558957

问:

我正在尝试安装版本 1.2.2 ,使用使用该选项创建的新 virtualenv。PyPi 中显示的当前版本是 1.2.3。有没有办法安装旧版本?我试过:MySQL_python--no-site-packages

pip install MySQL_python==1.2.2

但是,安装后,它仍显示在网站包中。这是此软件包特有的问题,还是我做错了什么?MySQL_python-1.2.3-py2.6.egg-info

蟒蛇 pip pypi mysql-python

评论


答:

42赞 dappawit 3/8/2011 #1

我相信如果您已经安装了软件包,pip 不会用另一个版本覆盖它。用于忽略以前的版本。-I

评论

1赞 Joe 3/8/2011
我没有安装它 - 使用使用 --no-site-packages 选项创建的新 virtualenv
3赞 dappawit 3/8/2011
好的,所以你要求 1.2.2 版本,它仍然安装 1.2.3,没有安装其他任何东西?您使用的语法对于获取特定版本是正确的。
0赞 user5359531 9/29/2017
“使用使用 --no-site-packages 选项创建的新 virtualenv”;您可能需要在此之前使用命令,以防止看到预安装的库unset PYTHONPATHpip
1赞 Nick.Mc 12/16/2020
No such option: -I
1435赞 Mahmoud Abdelkader 3/8/2011 #2

TL;博士

截至 2022 年 12 月 28 日的更新

pip install --force-reinstall -v

例如:pip install --force-reinstall -v "MySQL_python==1.2.2"

这些选项的含义:

  • --force-reinstall是重新安装所有软件包的选项,即使它们已经是最新的。
  • -v是冗长的。您可以组合以获得更详细的内容(即 )最多 3 次(例如)。-vv--force-reinstall -vvv

感谢 @Peter 强调这一点(考虑到第一次提出问题的时间,这个问题的上下文似乎已经扩大了!),Python 的文档讨论了使用 ,因为它可能会破坏您的安装,如果它是使用不同的包管理器安装的,或者如果您的包是/曾经是不同的版本。-I


原答案:

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

这些选项的含义:

  • -I代表将忽略已安装的软件包,覆盖它们。--ignore-installed
  • -v是冗长的。您可以组合以获得更详细的内容(即 )最多 3 次(例如)。-vv-Ivvv

有关更多信息,请参阅 。pip install --help

首先,我看到你要做的事情有两个问题。由于您已经安装了版本,因此应卸载当前现有的驱动程序或使用pip install -I MySQL_python==1.2.2

但是,您很快就会发现这不起作用。如果您查看 pip 的安装日志,或者如果您执行 pyPI URL 链接,您会发现 PyPI URL 链接不适用于 MySQL_python v1.2.2。您可以在此处验证这一点:http://pypi.python.org/pypi/MySQL-python/1.2.2pip install -Iv MySQL_python==1.2.2

由于 sourceforge.net 最近的升级和 PyPI 的陈旧 URL,下载链接 404s 和回退 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

评论

1赞 Jochen Ritzel 3/8/2011
不过,拥有多个版本应该没有问题,这就是为每个版本创建新文件夹并使用 .pth 文件的意义所在。
7赞 Joe 9/11/2018
很好奇,如果我们已经删除了现有安装,为什么使用 -I 选项 - 您能提供一些细节吗?
0赞 Manuel Jacob 2/20/2023
感谢您更新答案,尽管它已经有 10 多年的历史了。然而,现在 pip 似乎总是试图满足通过的要求(包括版本),必要时降级,因此不再需要传递任何其他选项。
731赞 user1978556 11/20/2015 #3

您甚至可以将版本范围与命令一起使用。像这样的东西:pip install

pip install 'stevedore>=1.3.0,<1.4.0'

如果软件包已经安装,并且您想降级它,请添加如下:--force-reinstall

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

评论

158赞 jschank 1/9/2016
例如:$ pip install 'xkcdpass==1.2.5' --force-reinstall
17赞 jmng 9/17/2018
在 Windows 上使用双引号:pip install “stevedore>=1.3.0,<1.4.0”
0赞 Amit Naidu 2/14/2023
或者使用插入符号进行转义:pip install antigravity^<1.0
206赞 Srikar Appalaraju 4/4/2016 #4

正如本文所建议的,一种方法是将版本提及为:pip

pip install -Iv MySQL_python==1.2.2

即使用并提及版本号以仅安装该版本。 忽略已安装的软件包。==-I, --ignore-installed

评论

4赞 Lionel Trebuchon 3/5/2019
小心!我的经验是,这将不同的版本并排安装!同样有趣的是,没有意识到这一点,但确实(并且会显示不同的包版本)。这也完全混淆了Pycharmpip listconda list
99赞 Zach Weg 4/5/2018 #5

要安装特定的 python 包版本,无论是第一次、升级还是降级,请使用:

pip install --force-reinstall MySQL_python==1.2.4

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

pip install MySQL_python==

评论

5赞 FedFranz 6/13/2018
使用 pip 10.0.1,这是唯一有效的解决方案。“-I”选项实际上重新安装了以前的版本。
13赞 Trenton 9/2/2018 #6

由于这似乎是 pip 版本 10 中引入的重大更改,因此我降级到兼容版本:

pip install 'pip<10' 

此命令告诉 pip 安装低于版本 10 的模块版本。在 virutalenv 中执行此操作,这样您就不会搞砸 Python 的站点安装。

1赞 Samarth 11/12/2018 #7

您可以通过 2 种方式安装任何版本的软件包:- A)。pip install -iv package-name == 版本 B)。pip install -v package-name == 版本

对于一个

在这里,如果您在安装时使用 -I 选项(当您不知道软件包是否已安装时)(例如 'pip install -Iv pyreadline == 2.* '或其他东西),您将安装一个新的单独软件包,其中包含相同的现有软件包,具有一些不同的版本。

对于 B

  1. 首先,您可能需要检查是否有违反的需求。点子检查

2.然后查看 pip list 已经安装了什么

3.如果软件包列表包含您希望使用特定版本安装的任何软件包,那么更好的选择是先通过pip uninstall package-name卸载此版本的软件包

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

30赞 Jack Chan 1/6/2019 #8

有时,会缓存以前安装的版本。

~$ pip install pillow==5.2.0

它返回以下内容: 已满足要求:
pillow==5.2.0 in /home/ubuntu/anaconda3/lib/python3.6/site-packages (5.2.0)

我们可以使用 --no-cache-dir 和 -I 来覆盖它

~$ pip install --no-cache-dir -I pillow==5.2.0
9赞 0x5453 2/23/2019 #9

我最近在使用 's 标志时遇到了一个问题,我想在某处记录:pip-I

-I在继续操作之前不会卸载现有软件包;它只会将其安装在旧之上。这意味着应该在版本之间删除的任何文件都将保留在原位。如果这些文件与其他已安装的模块共享名称,则可能会导致奇怪的行为。

例如,假设有一个名为 .在其中一个文件中,他们使用 .现在,在 中,这指向标准库模块,但在 中,他们添加了一个本地作为标准库版本的替代品(无论出于何种原因)。packagepackageimport datetime[email protected]datetime[email protected]datetime.py

现在假设我运行,但后来意识到我实际上想要版本。如果我现在运行 ,旧的 datetime.py 文件将不会被删除,因此任何对 import datetime 的调用都将导入错误的模块。pip install package==3.0.02.0.0pip install -I package==2.0.0

就我而言,这表现为奇怪的语法错误,因为较新版本的包添加了一个仅与 Python 3 兼容的文件,当我降级包版本以支持 Python 2 时,我继续导入仅限 Python-3 的模块。

基于此,我认为在更新已安装的软件包版本时,卸载旧软件包总是比使用旧软件包更可取。-I

1赞 Dilshad.A 9/30/2019 #10

如果要更新到最新版本,但不知道最新版本是什么,可以键入。

pip install MySQL_python --upgrade

这将更新可用最新版本的MySQL_python,可用于任何其他软件包版本。

9赞 Tapan Hegde 10/1/2019 #11

下面的命令对我有用

Python 版本 - 2.7

软件包 - python-jenkins

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

评论

2赞 TheAmigo 4/23/2020
我没有投反对票,但可以看到这并没有回答问题,也没有提供 OP 可以用来解决问题的任何有用信息。
-1赞 Omer Anisfeld 12/8/2022 #12

依赖项打包有一个新版本,其中它已从其代码库
中删除了 LegacyVersion 快速解决方案可能是 pin packaging==21.3