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

<virtualenv>/build/Django的1.2.3版本与Django==1.2.4冲突(from -r requirements/apps.txt(第3行))

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

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

我找不到任何标志,触发总包重新下载。我甚至尝试先运行卸载命令,然后再运行安装命令,但没有成功。我遗漏了什么吗?


当前回答

如果升级一个包,旧的包会被卸载。

一种方便的方法是使用这个pip-upgrader,它也更新您的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

如果需要升级到预发布/后发布版本,请在命令中添加——pre-release参数。

完全披露:这个包是我写的。

其他回答

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

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

当你用Django开发一个应用程序,目前只能使用某个特定版本的Django(比如Django=1.9.x),你想升级某个依赖的包,添加bug修复/新特性,而升级后的包依赖于Django(但它可以使用1.5之后的任何版本的Django),这是非常有用的。

pip install——upgrade Django -some-package的默认行为是将Django升级到可用的最新版本,否则可能会破坏你的应用程序,尽管使用——upgrade-strategy only-if-needed依赖包现在只在必要时才会升级。

通常,pip将自行清理并删除构建目录中的内容。它唯一不这样做的情况是:

您使用了——no-install选项 您正在使用可编辑的包 安装被取消或以其他方式中断。

在所有其他情况下,您不应该使用阻塞环境的构建目录。

——upgrade的快捷命令:

pip install Django --upgrade

Is:

pip install Django -U

如果升级一个包,旧的包会被卸载。

一种方便的方法是使用这个pip-upgrader,它也更新您的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

如果需要升级到预发布/后发布版本,请在命令中添加——pre-release参数。

完全披露:这个包是我写的。

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

pip install Django --upgrade

升级快捷方式:

pip install Django -U

注意:如果您正在升级的包有任何要求,此命令将额外升级所有要求到可用的最新版本。在pip的最新版本中,您可以通过指定——upgrade-strategy - only-if-needed来防止这种行为。有了这个标志,依赖项将不会升级,除非已安装的依赖包的版本不再满足升级包的要求。