首页 文章

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

提问于
浏览
306

我正在使用带有需求文件的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))

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

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

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

7 回答

  • 40

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

    <virtualenv>/bin/pip uninstall Django
    

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

    <virtualenv>/bin/pip install Django
    

    希望这会有所帮助 .

  • 9

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

    pip install Django --upgrade
    

    升级快捷方式:

    pip install Django -U
    

    Note :如果要升级的软件包有任何要求,此命令将另外将所有要求升级到可用的最新版本 . 在最新版本的pip中,you can prevent this behavior by specifying --upgrade-strategy only-if-needed . 使用该标志,除非已安装的依赖包版本不再满足升级包的要求,否则不会升级依赖关系 .

  • 25

    根据pip docs例子3

    pip install --upgrade django
    

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

    假设您要使用这种方法升级需要 django >= 1.2.4somepackage ,它还会将 somepackage AND django 升级到最新更新 . 为了安全起见:

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

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

  • 986

    --upgrade 的快捷命令:

    pip install Django --upgrade
    

    方法是:

    pip install Django -U
    
  • 9

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

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

    当你在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 依赖包 .

  • 3

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

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

    Installation

    pip install pip-upgrader
    

    Usage

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

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

    pip-upgrade
    

    Advanced usage

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

    pip-upgrade path/to/requirements.txt
    

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

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

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

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

  • 38

    通常,pip将自行清理并删除构建目录的内容 . 它不会这样做的唯一时间是:

    • 您使用了 --no-install 选项

    • 您正在使用可编辑的包

    • 安装已取消或以其他方式中断 .

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

相关问题