我如何使用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
,它也会升级一些somepackage
和django
到最新的更新。 为了安全,做:
# 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目录的内容。 唯一不这样做的时候是如果:
- 您使用了
--no-install
选项 - 您正在使用可编辑的软件包
- 安装被取消或被中断。
在所有其他情况下,您不应该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
参数添加到您的命令中。
充分披露:我写了这个包。 希望能帮助到你。