使用pip安装特定的软件包版本

时间:2011-03-07 22:58:14

标签: python mysql pip pypi mysql-python

我正在尝试使用--no-site-packages选项创建的全新virtualenv安装MySQL_python适配器的1.2.2版。 PyPi中显示的当前版本是1.2.3。有没有办法安装旧版本?我发现了一篇文章,说明应该这样做:

pip install MySQL_python==1.2.2

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

11 个答案:

答案 0 :(得分:746)

首先,我看到你要做的事情有两个问题。由于您已经安装了版本,因此您应该卸载当前现有的驱动程序或使用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,下载链接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 :(得分:400)

您甚至可以使用带pip install命令的版本范围。像这样:

pip install 'stevedore>=1.3.0,<1.4.0'

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

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

答案 2 :(得分:113)

this post中建议的一种方法是将pip中的版本称为

pip install -Iv MySQL_python==1.2.2

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

答案 3 :(得分:51)

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

pip install --force-reinstall MySQL_python==1.2.4

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

pip install MySQL_python==

答案 4 :(得分:35)

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

答案 5 :(得分:4)

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

~$ pip install pillow==5.2.0

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

我们可以将--no-cache-dir与-I一起使用来覆盖它

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

答案 6 :(得分:3)

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

pip install 'pip<10' 

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

答案 7 :(得分:1)

下面的命令对我有用

Python版本-2.7

软件包-python-jenkins

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

答案 8 :(得分:0)

您可以通过两种方式安装任何具有版本的软件包: A)。 pip install -iv软件包名称==版本 B)。 pip install -v软件包名称==版本

对于A

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

对于B

  1. 首先,您可能要检查是否有不合要求的要求。 点子检查

2。,然后查看已经安装了什么 点列表

3。如果软件包列表包含要安装的特定版本的软件包,则更好的选择是先卸载此版本的软件包,方法是: pip卸载程序包名称

4。现在,您可以按照以下步骤重新安装具有特定版本的相同软件包: pip install -v package-name ==版本 例如pip install -v pyreadline == 2。*

答案 9 :(得分:0)

我最近在使用要记录在某个地方的pip的{​​{1}}标志时遇到问题:

-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的任何调用都将导入错误的模块。

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

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

答案 10 :(得分:0)

如果您想更新到最新版本,但您不知道可以输入的是最新版本。

pip安装MySQL_python --upgrade

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