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

Joe*_*Joe 1199 python mysql pip pypi mysql-python

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

pip install MySQL_python==1.2.2
Run Code Online (Sandbox Code Playgroud)

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

Mah*_*der 810

首先,我看到你正在尝试做的两个问题.由于您已经安装了版本,因此您应该卸载当前现有的驱动程序或使用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
Run Code Online (Sandbox Code Playgroud)

  • 这将安装正确的版本,这是这个问题的答案 - 感谢您的帮助.现在遇到一个不同的问题:"错误:命令'/usr/bin/gcc-4.2'失败,退出状态为1",同时构建'_mysql'扩展名.我知道我有GCC,MySQL_python 1.2.3的安装顺利进行.有其他人看过这个问题,特别是1.2.2吗? (3认同)
  • 当然 - 这是链接:http://stackoverflow.com/questions/5226945/gcc-error-when-installing-mysql-python-1-2-2-mac-os-10-6-snow-leopard (2认同)
  • 如果我们已经删除了现有的安装,你好奇为什么使用-I选项 - 你能详细介绍一下吗? (2认同)

小智 459

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

pip install 'stevedore>=1.3.0,<1.4.0'
Run Code Online (Sandbox Code Playgroud)

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

pip install 'stevedore>=1.3.0,<1.4.0' --force-reinstall
Run Code Online (Sandbox Code Playgroud)

  • 例如:`$ pip install'xkcdpass == 1.2.5' - force-reinstall` (120认同)
  • @HandofC'thuhlu我认为我们必须使用双引号用于windows而不是python 2 (6认同)
  • 只是要提到Python 2我必须使用双引号"而不是" (2认同)
  • 在Windows上使用双引号:pip install“ stevedore&gt; = 1.3.0,&lt;1.4.0” (2认同)

Sri*_*aju 126

在建议的一种方式这篇文章是提版本pip

==

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

  • 谨防!我的经验是,这安装了不同的版本**彼此相邻**!另外有趣的是,“pip list”不知道这一点,但“conda list”知道(并且会显示不同的包版本)。它也完全混淆了*Pycharm*。 (4认同)

Zac*_*Weg 60

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

pip install --force-reinstall MySQL_python==1.2.4
Run Code Online (Sandbox Code Playgroud)

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

pip install MySQL_python==
Run Code Online (Sandbox Code Playgroud)

  • 使用pip 10.0.1,这是唯一可行的解​​决方案."-I"选项实际上重新安装了以前的版本. (4认同)

dap*_*wit 37

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

  • 好的,所以你要求版本1.2.2,它仍然安装1.2.3,没有其他安装?您使用的语法对于获取特定版本是正确的. (2认同)

Jac*_*han 13

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

~$ pip install pillow==5.2.0
Run Code Online (Sandbox Code Playgroud)

它返回以下内容:
已满足要求:/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
Run Code Online (Sandbox Code Playgroud)


Tre*_*ton 9

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

pip install 'pip<10' 
Run Code Online (Sandbox Code Playgroud)

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


0x5*_*453 8

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

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

例如,假设有一个名为package. 在packages 文件之一中,他们使用import datetime. 现在,在 中package@2.0.0,这指向标准库datetime模块,但在 中package@3.0.0,他们添加了一个本地datetime.py作为标准库版本的替代(无论出于何种原因)。

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

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

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


Tap*_*gde 8

以下命令对我有用

Python 版本 - 2.7

包 - python-jenkins

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

  • 我没有投反对票,但可以看到这并没有回答问题,也没有提供OP可以用来解决问题的任何有用信息。 (2认同)