提问人:Joe 提问时间:3/8/2011 最后编辑:questionto42Joe 更新时间:12/29/2022 访问量:2558957
使用 pip 安装特定包版本
Installing specific package version with pip
问:
我正在尝试安装版本 1.2.2 ,使用使用该选项创建的新 virtualenv。PyPi 中显示的当前版本是 1.2.3。有没有办法安装旧版本?我试过:MySQL_python
--no-site-packages
pip install MySQL_python==1.2.2
但是,安装后,它仍显示在网站包中。这是此软件包特有的问题,还是我做错了什么?MySQL_python-1.2.3-py2.6.egg-info
答:
我相信如果您已经安装了软件包,pip 不会用另一个版本覆盖它。用于忽略以前的版本。-I
评论
unset PYTHONPATH
pip
No such option: -I
TL;博士:
截至 2022 年 12 月 28 日的更新:
pip install --force-reinstall -v
例如:pip install --force-reinstall -v "MySQL_python==1.2.2"
这些选项的含义:
--force-reinstall
是重新安装所有软件包的选项,即使它们已经是最新的。-v
是冗长的。您可以组合以获得更详细的内容(即 )最多 3 次(例如)。-vv
--force-reinstall -vvv
感谢 @Peter 强调这一点(考虑到第一次提出问题的时间,这个问题的上下文似乎已经扩大了!),Python 的文档讨论了使用 ,因为它可能会破坏您的安装,如果它是使用不同的包管理器安装的,或者如果您的包是/曾经是不同的版本。-I
原答案:
pip install -Iv
(即pip install -Iv MySQL_python==1.2.2
)
这些选项的含义:
-I
代表将忽略已安装的软件包,覆盖它们。--ignore-installed
-v
是冗长的。您可以组合以获得更详细的内容(即 )最多 3 次(例如)。-vv
-Ivvv
有关更多信息,请参阅 。pip install --help
首先,我看到你要做的事情有两个问题。由于您已经安装了版本,因此应卸载当前现有的驱动程序或使用pip install -I MySQL_python==1.2.2
但是,您很快就会发现这不起作用。如果您查看 pip 的安装日志,或者如果您执行 pyPI URL 链接,您会发现 PyPI URL 链接不适用于 MySQL_python v1.2.2。您可以在此处验证这一点:http://pypi.python.org/pypi/MySQL-python/1.2.2pip install -Iv 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
评论
您甚至可以将版本范围与命令一起使用。像这样的东西:pip install
pip install 'stevedore>=1.3.0,<1.4.0'
如果软件包已经安装,并且您想降级它,请添加如下:--force-reinstall
pip install 'stevedore>=1.3.0,<1.4.0' --force-reinstall
评论
$ pip install 'xkcdpass==1.2.5' --force-reinstall
pip install antigravity^<1.0
正如本文所建议的,一种方法是将版本提及为:pip
pip install -Iv MySQL_python==1.2.2
即使用并提及版本号以仅安装该版本。 忽略已安装的软件包。==
-I, --ignore-installed
评论
pip list
conda list
要安装特定的 python 包版本,无论是第一次、升级还是降级,请使用:
pip install --force-reinstall MySQL_python==1.2.4
MySQL_python 1.2.2 版不可用,所以我使用了不同的版本。要查看索引中的所有可用包版本,请排除该版本:
pip install MySQL_python==
评论
由于这似乎是 pip 版本 10 中引入的重大更改,因此我降级到兼容版本:
pip install 'pip<10'
此命令告诉 pip 安装低于版本 10 的模块版本。在 virutalenv 中执行此操作,这样您就不会搞砸 Python 的站点安装。
您可以通过 2 种方式安装任何版本的软件包:- A)。pip install -iv package-name == 版本 B)。pip install -v package-name == 版本
对于一个
在这里,如果您在安装时使用 -I 选项(当您不知道软件包是否已安装时)(例如 'pip install -Iv pyreadline == 2.* '或其他东西),您将安装一个新的单独软件包,其中包含相同的现有软件包,具有一些不同的版本。
对于 B
- 首先,您可能需要检查是否有违反的需求。点子检查
2.然后查看 pip list 已经安装了什么
3.如果软件包列表包含您希望使用特定版本安装的任何软件包,那么更好的选择是先通过pip uninstall package-name卸载此版本的软件包
4.现在您可以通过 pip install -v package-name==version 重新安装具有特定版本的相同软件包,例如 pip install -v pyreadline == 2.*
有时,会缓存以前安装的版本。
~$ pip install pillow==5.2.0
它返回以下内容: 已满足要求:
pillow==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
我最近在使用 's 标志时遇到了一个问题,我想在某处记录:pip
-I
-I
在继续操作之前不会卸载现有软件包;它只会将其安装在旧之上。这意味着应该在版本之间删除的任何文件都将保留在原位。如果这些文件与其他已安装的模块共享名称,则可能会导致奇怪的行为。
例如,假设有一个名为 .在其中一个文件中,他们使用 .现在,在 中,这指向标准库模块,但在 中,他们添加了一个本地作为标准库版本的替代品(无论出于何种原因)。package
package
import datetime
[email protected]
datetime
[email protected]
datetime.py
现在假设我运行,但后来意识到我实际上想要版本。如果我现在运行 ,旧的 datetime.py
文件将不会被删除,因此任何对 import datetime
的调用都将导入错误的模块。pip install package==3.0.0
2.0.0
pip install -I package==2.0.0
就我而言,这表现为奇怪的语法错误,因为较新版本的包添加了一个仅与 Python 3 兼容的文件,当我降级包版本以支持 Python 2 时,我继续导入仅限 Python-3 的模块。
基于此,我认为在更新已安装的软件包版本时,卸载旧软件包总是比使用旧软件包更可取。-I
如果要更新到最新版本,但不知道最新版本是什么,可以键入。
pip install MySQL_python --upgrade
这将更新可用最新版本的MySQL_python,可用于任何其他软件包版本。
下面的命令对我有用
Python 版本 - 2.7
软件包 - python-jenkins
命令-$ pip install 'python-jenkins>=1.1.1'
评论
依赖项打包有一个新版本,其中它已从其代码库
中删除了 LegacyVersion 快速解决方案可能是 pin packaging==21.3
评论