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


1310

我正在尝试使用通过该--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在站点包中。这是此软件包专用的问题,还是我做错了什么?


16
感谢您的提示,这对我有用,它通过pip install MySQL_python==1.8.9
tim

4
是的,这对熊猫也pip install -Iv pandas==0.12.0
有用

1
也为我工作:pip install xvfbwrapper == 0.2.4
amitdatta

Answers:


892

TL; DR:

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

首先,我发现您要执行的操作有两个问题。由于您已经安装了版本,因此应该卸载当前的现有驱动程序或使用pip install -I MySQL_python==1.2.2

但是,您很快就会发现这不起作用。如果您查看pip的安装日志,或者执行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
但是,拥有多个版本应该没有问题,那就是为每个版本创建新文件夹并使用.pth文件。
Jochen Ritzel 2011年

3
这将安装正确的版本,因此是此问题的答案-感谢您的帮助。现在遇到另一个问题:构建'_mysql'扩展名时,“错误:命令'/usr/bin/gcc-4.2'失败,退出状态为1”。我知道我有GCC,并且MySQL_python 1.2.3的安装顺利进行。其他人是否看到过此问题,特别是在1.2.2中?

请提出另一个问题,并发布您从pip获得的错误消息。
Mahmoud Abdelkader


4
很好奇,如果我们已经删除了现有安装,为什么要使用-I选项-您能提供一些详细信息吗?

509

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

pip install 'stevedore>=1.3.0,<1.4.0'

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

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

128
例如: $ pip install 'xkcdpass==1.2.5' --force-reinstall
jschank '16

1
完善!在Ubunto 15.04上运行,它(自动)用指定的版本替换了现有的库。解决了我所有的问题!
zevij '16

2
只是要提一下,对于Python 2,我必须使用双引号“代替'
Prime_Aqasix

6
@ HandofC'thuhlu我认为我们必须对Windows使用双引号而不是python 2
SmartManoj

3
在Windows上使用双引号:pip install“
stevedore

139

一种方法,在提出这个职位,是提版本pip为:

pip install -Iv MySQL_python==1.2.2

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


1
谨防!我的经验是,这会彼此并排安装不同的版本!同样有趣的是,pip list他没有意识到这一点,但是知道了conda list(并且将显示不同的软件包版本)。这也完全搅乱了Pycharm
Lionel Trebuchon

66

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

pip install --force-reinstall MySQL_python==1.2.4

MySQL_python版本1.2.2不可用,因此我使用了其他版本。要从索引查看所有可用的软件包版本,请排除该版本:

pip install MySQL_python==

4
对于pip 10.0.1,这是唯一可行的解​​决方案。“ -I”选项实际上是重新安装以前的版本。
FedFranzoni

38

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


1
我没有安装它-使用通过--no-site-packages选项创建的新virtualenv
Joe

2
好的,所以您要求版本1.2.2仍然安装1.2.3,并且没有安装其他任何东西吗?您使用的语法对于获取特定版本是正确的。
dappawit 2011年

“使用通过--no-site-packages选项创建的新的virtualenv”;您可能需要在命令前加上此命令,unset PYTHONPATH以免pip看到预先安装的库
user5359531 2009年

17

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

~$ 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

5

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

pip install 'pip<10' 

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


5

我最近在使用想要记录到某处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.0datetime.py文件将不会被删除,因此任何调用import datetime都会导入错误的模块。

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

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


3

下面的命令对我有用

Python版本-2.7

包-python-jenkins

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


亲爱的唐纳德,请说明为什么这个答案是唐纳德?
Tapan Hegde

我没有投票,但是可以看到这不能回答问题,也不能提供OP可以用来解决问题的任何有用信息。
TheAmigo

0

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

为一个

在这里,如果您在安装时使用-I选项(当您不知道该软件包是否已安装时)(例如'pip install -Iv pyreadline == 2. *'之类的东西),则您将在安装新的单独的程序包,而相同的现有程序包具有不同的版本。

对于B

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

2.然后查看点子列表已经安装了什么

3.如果软件包列表中包含您要安装的特定版本的软件包,那么更好的选择是先通过pip uninstall package-name卸载该版本的软件包。

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


0

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

pip安装MySQL_python --upgrade

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.