关于python:使用pip安装特定的包版本

Installing specific package versions with pip

我正在尝试安装1.2.2版的mysql_python适配器,使用一个使用--no-site-packages选项创建的新的virtualenv。Pypi中显示的当前版本为1.2.3。有没有安装旧版本的方法?我找到一篇文章,说应该这样做:

1
pip install MySQL_python==1.2.2

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


首先,我看到两个问题,你想做什么。因为您已经安装了一个版本,所以您应该卸载当前的现有驱动程序或使用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链接正在无限地重新定向。

因此,要正确安装驱动程序,可以执行以下步骤:

1
2
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命令中使用版本范围。像这样:

1
pip install 'stevedore>=1.3.0,<1.4.0'

如果已经安装了软件包,并且您希望降级,请按如下方式添加--force-reinstall

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


本文建议的一种方法是在pip中提到版本为

pip install -Iv MySQL_python==1.2.2

也就是说,使用==并提到版本号,只安装该版本。-I, --ignore-installed忽略已安装的软件包。


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

1
pip install --force-reinstall MySQL_python==1.2.4

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

1
pip install MySQL_python==


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


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

1
~$ pip install pillow==5.2.0

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

我们可以使用--no cache dir和-i来覆盖这个

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


由于这似乎是PIP版本10中引入的一个突破性的更改,所以我降级到兼容版本:

1
pip install 'pip<10'

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


我最近在使用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安装-iv包名称==版本B)pip安装-v包名称==版本

对于一个

在这里,如果您在安装时使用-i选项(当您不知道包是否已安装时)(如"pip install-iv pyreadline==2.*"或其他),您将安装一个新的独立包,该包与具有不同版本的同一现有包具有相同的版本。

对于乙

  • 首先,您可能希望检查是否有损坏的需求。匹普支票
  • 2.然后查看已安装的匹普列表

    3.如果软件包列表中包含您希望使用特定版本安装的任何软件包,则更好的选择是先卸载此版本的软件包,方法是PIP卸载包名称

    4.现在您可以继续使用特定版本重新安装同一个包,方法是pip安装-v包名称==版本例如,PIP安装-V Pyreadline==2.*