我如何使用pip和需求文件升级特定的软件包?

我在一个virtualenv中为我的Django项目使用带有需求文件的pip。 我试图升级一些软件包,特别是Django本身,而且我得到一个有关源代码冲突的错误:

Source in `<virtualenv`>/build/Django has version 1.2.3 that conflicts with Django==1.2.4 (from -r requirements/apps.txt (line 3)) 

这是在我的需求文件中将Django的版本号从1.2.3更新到1.2.4之后。 我正在使用这个命令来实际升级:

 pip --install --upgrade -E `<virtualenv dir`> --requirement `<requirements file`> 

我找不到任何触发总包重新下载的标志。 我什至尝试运行一个卸载命令,然后安装,但没有骰子。 也许我错过了什么?

我不知道这是否是你的问题,但在我的情况下,我无法将Django升级到1.2.4 – 我总是用1.2.3版本完成,所以我卸载了Django:

 <virtualenv>/bin/pip uninstall Django 

然后我删除了<virtualenv>/build/Django目录,最后我安装了正确的版本:

 <virtualenv>/bin/pip install Django 

希望这会有所帮助。

我运行以下命令,并从1.2.3升级到1.4.0

 pip install Django --upgrade 

升级的捷径:

 pip install Django -U 

注意 :如果您正在升级的软件包有任何要求,该命令会将所有要求另外升级到可用的最新版本。 在最近的pip版本中, 您可以通过--upgrade-strategy only-if-needed指定--upgrade-strategy only-if-needed来防止此行为 。 使用该标志,依赖关系将不会升级,除非相关软件包的安装版本不再满足升级包的要求。

根据pip 文档示例3

 pip install --upgrade django 

但根据我的经验,使用这种方法也将升级任何相关的包。 例:

假设你想用这种方法升级somepackage需要django >= 1.2.4 somepackage ,它也会升级一些somepackagedjango到最新的更新。 为了安全,做:

 # assume you want to keep django 1.2.4 pip install --upgrade somepackage django==1.2.4 

这样做将升级一些somepackage并保持django到1.2.4版本

--upgrade的快捷键命令:

 pip install Django --upgrade 

方法是:

 pip install Django -U 

如果只想升级一个名为somepackage特定软件包,则应该在最新版本的pip中使用该命令

 pip install --upgrade --upgrade-strategy only-if-needed somepackage 

当你在django中开发一个应用程序时,这个function非常有用,目前只能使用特定版本的django(比如Django = 1.9.x),并且想要升级一些具有bug-fix / newfunction的相关软件包,而升级的软件包依赖于在Django上(但可以用1.5之后的任何版本的django)。 pip install --upgrade django-some-package的默认行为是pip install --upgrade django-some-package升级到可用的最新版本,否则可能会破坏您的应用程序,尽pipe--upgrade-strategy only-if-needed使用了--upgrade-strategy only-if-needed相关软件包现在只能是根据需要升级。

正常情况下,pip将自行清理并删除build目录的内容。 唯一不这样做的时候是如果:

  1. 您使用了--no-install选项
  2. 您正在使用可编辑的软件包
  3. 安装被取消或被中断。

在所有其他情况下,您不应该build堵塞您的环境的目录。

如果你升级一个软件包,旧的将被卸载。

一个方便的方法是使用这个点子升级程序 ,它也更新所选包(或所有包)的requirements.txt文件中的版本。

安装

 pip install pip-upgrader 

用法

激活你的virtualenv(很重要,因为它也会在当前的virtualenv中安装升级包的新版本)。

cd进入你的项目目录,然后运行:

 pip-upgrade 

高级用法

如果需求放置在非标准位置,请将它们作为参数发送:

 pip-upgrade path/to/requirements.txt 

如果您已经知道要升级的软件包,只需将它们作为参数发送即可:

 pip-upgrade -p django -p celery -p dateutil 

如果您需要升级到预发布/发布后版本,请将--prerelease参数添加到您的命令中。

充分披露:我写了这个包。 希望能帮助到你。