我正在尝试安装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。这是这个包特有的问题,还是我做错了什么?


当前回答

由于这似乎是pip第10版中引入的一个突破性更改,我降级为兼容版本:

pip install 'pip<10' 

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

其他回答

您甚至可以使用pipinstall命令的版本范围。类似于:

pip install 'stevedore>=1.3.0,<1.4.0'

如果软件包已经安装,并且您希望降级,请添加--强制重新安装,如下所示:

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

由于这似乎是pip第10版中引入的一个突破性更改,我降级为兼容版本:

pip install 'pip<10' 

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

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

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

例如,假设有一个名为package的包。在其中一个包文件中,它们使用导入日期时间。现在,在package@2.0.0,这指向标准库datetime模块,但在package@3.0.0,他们添加了一个本地datetime.py作为标准库版本的替代品(无论出于什么原因)。

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

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

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

有两种方法可以安装版本为的任何软件包:-A) 。pip安装-Iv包名称==版本B) 。pip安装-v包名称==版本

对于A

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

对于B

首先,您可能需要检查是否没有违反要求。管道检查

2.然后查看已安装的pip列表

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

4.现在,您可以继续使用特定版本重新安装相同的软件包pip安装-v包名称==版本例如pip-install-vpyreadline==2*

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

~$ 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来覆盖这个

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