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

gca*_*rio 405 django pip virtualenv

我正在使用带有需求文件的pip,在virtualenv中,用于我的Django项目.我正在尝试升级一些软件包,特别是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))
Run Code Online (Sandbox Code Playgroud)

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

pip --install --upgrade -E `<virtualenv dir`> --requirement `<requirements file`>
Run Code Online (Sandbox Code Playgroud)

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

小智 1205

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

pip install Django --upgrade
Run Code Online (Sandbox Code Playgroud)

升级快捷方式:

pip install Django -U
Run Code Online (Sandbox Code Playgroud)

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

  • 注意,它也**更新所有依赖**并且可以搞砸一切.最好的选择是卸载并重新安装软件包. (28认同)
  • 这对我来说更新了我所有的包装,完全搞砸了一切!!!! 文档声明: - 将所有包升级到最新的可用版本.这是正确的还是我做错了什么? (7认同)
  • @OrbiterFleet我需要更新"请求",所以我做了'pip install Requests --upgrade`和*only*"requests"升级了.当我查看文档时,描述说"升级所有*指定的*包". (4认同)
  • 升级特定包使用`pip install --upgrade django == 1.4.0` (3认同)

Mar*_*ski 56

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

<virtualenv>/bin/pip uninstall Django
Run Code Online (Sandbox Code Playgroud)

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

<virtualenv>/bin/pip install Django
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助.

  • 这不是最好的做法.使用`pip install Django -U`或`pip install Django --upgrade`,如@JoeyG的回答中所述. (46认同)

wha*_*ard 51

根据pip docs例子3

pip install --upgrade django
Run Code Online (Sandbox Code Playgroud)

但根据我的经验,使用此方法还将升级与其相关的任何包.例:

假设要升级somepackage那些需要django >= 1.2.4使用这种方法也将升级somepackagedjango到最新的更新.为了安全起见:

# assume you want to keep django 1.2.4
pip install --upgrade somepackage django==1.2.4
Run Code Online (Sandbox Code Playgroud)

这样做会升级somepackage并保持django到1.2.4版本


Aar*_*ier 32

快捷命令--upgrade:

pip install Django --upgrade
Run Code Online (Sandbox Code Playgroud)

方法是:

pip install Django -U
Run Code Online (Sandbox Code Playgroud)

  • 如何编辑现有的答案来添加这些信息而不是(不完整的)答案? (6认同)
  • 我的意思是你可以编辑JoeyG给出的答案,添加你在上下文中提供的快捷方式选项. (3认同)

Sim*_*aei 17

如果升级包,则将卸载旧包.

一种方便的方法是使用此pip-upgrader,它还会更新requirements.txt文件中所选包(或所有包)的版本.

安装

pip install pip-upgrader
Run Code Online (Sandbox Code Playgroud)

用法

激活你的virtualenv(重要的是,因为它还将在当前的virtualenv中安装新版本的升级包).

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

pip-upgrade
Run Code Online (Sandbox Code Playgroud)

高级用法

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

pip-upgrade path/to/requirements.txt
Run Code Online (Sandbox Code Playgroud)

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

pip-upgrade -p django -p celery -p dateutil
Run Code Online (Sandbox Code Playgroud)

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

完全披露:我写了这个包.希望能帮助到你.


dr *_*bob 14

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

pip install --upgrade --upgrade-strategy only-if-needed somepackage
Run Code Online (Sandbox Code Playgroud)

当你在django中开发一个当前只能使用特定版本的django(比如Django = 1.9.x)并希望使用bug-fix/new功能升级某个依赖包并且升级后的包依赖时,这非常有用.在django(但是在1.5之后使用任何版本的django).默认行为是pip install --upgrade django-some-package将django升级到可用的最新版本,否则可能会破坏您的应用程序,但--upgrade-strategy only-if-needed现在只能根据需要升级依赖包.


小智 8

这为我解决了这个问题:

pip install -I --upgrade psutil --force
Run Code Online (Sandbox Code Playgroud)

之后只需使用新版本卸载 psutil 并跳跃,您可以突然安装旧版本(:


Bed*_*ang 8

定义要升级的特定版本对我有帮助,而不仅仅是升级命令。

pip3 install larapy-installer==0.4.01 -U
Run Code Online (Sandbox Code Playgroud)