【问题标题】:How can I upgrade specific packages using pip and a requirements file?如何使用 pip 和需求文件升级特定软件包?
【发布时间】:2011-05-30 23:35:33
【问题描述】:

我正在为我的 Django 项目在 virtualenv 中使用带有需求文件的 pip。我正在尝试升级一些包,尤其是 Django 本身,但我收到有关源代码冲突的错误:

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

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

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

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

【问题讨论】:

  • 请检查@dr-jimbob 的答案,因为最新版本的 pip 实际上会升级您正在升级的软件包所依赖的所有其他依赖项。
  • @gcaprio 我建议你现在选择 marcin swierczynski 答案
  • 在具有Django 后端和Angular 前端的应用程序中,requirements.txt 文件应该在根目录中(并使用py -m pip install -r requirements.txt 在那里运行)还是应该在manage.py等文件所在的后端文件夹?

标签: django virtualenv pip


【解决方案1】:

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

pip install Django --upgrade

升级快捷方式:

pip install Django -U

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

【讨论】:

  • 这对我来说更新了我所有的打包并完全搞砸了一切!!!!文档说明: --将所有软件包升级到最新的可用版本。这是正确的还是我做错了什么?
  • @OrbiterFleet 我需要更新“请求”,所以我做了pip install Requests --upgrade 并且“请求”被升级了。当我查看文档时,描述说“升级所有指定的包”。
  • 注意,它还更新所有依赖项并且可能会搞砸一切。最好的选择是卸载并重新安装包。
  • 升级特定包使用pip install --upgrade django==1.4.0
  • 这应该是根据问题的正确答案或者问题本身是错误的。
【解决方案2】:

首先确保您已检查the most voted answer


我不确定这是否正是您的问题,但就我而言,我无法将 Django 升级到 1.2.4 - 我总是以 1.2.3 版本完成,所以我卸载了 Django:

<virtualenv>/bin/pip uninstall Django

然后我删除了&lt;virtualenv&gt;/build/Django 目录,最后我安装了正确的版本:

<virtualenv>/bin/pip install Django

【讨论】:

  • 这不是最佳做法。使用@JoeyG 的答案中所述的pip install Django -Upip install Django --upgrade
  • @Ahmad 同意。在 pip 和 virtual env 中应该有一个平滑的更新过程。
【解决方案3】:

根据pipdocumentation例子3:

pip install --upgrade django

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

假设您想使用这种方法升级需要Django &gt;= 1.2.4somepackage,它还将升级somepackage django 到最新更新。为了安全起见,请执行以下操作:

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

这样做会升级 somepackage 并将 Django 保持在 1.2.4 版本。

【讨论】:

  • 很好,但您的解释令人困惑,因为您从django 作为主包开始,然后在示例中使用somepackage,然后使用django 作为依赖项。
  • 是的,它应该是pip install --upgrade django==1.2.4,没有“somepackage”
【解决方案4】:

--upgrade的快捷命令:

pip install Django --upgrade

是:

pip install Django -U

【讨论】:

  • 如何编辑现有答案以添加此信息而不是(不完整的)答案?
  • @a1an 请建议您认为应该在“建议的编辑”中添加哪些额外信息。谢谢
  • 我的意思是你可以编辑 JoeyG 给出的答案,在那里添加你在上下文中提供的快捷方式选项。
【解决方案5】:

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

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

当您在 Django 中开发应用程序时非常有用,该应用程序目前只能与特定版本的 Django(比如 Django=1.9.x)一起使用,并且想要升级一些具有错误修复/新功能的依赖包,并且升级包依赖于 Django(但它适用于 1.5 之后的任何版本的 Django)。

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

【讨论】:

    【解决方案6】:

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

    一种方便的方法是使用此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
    

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

    完全披露:我写了这个包。

    【讨论】:

    • 是否可以使用这种方法一次升级所有包(即,不列出它们)?
    • @MikePalmice 是的:pip-upgrade -p all 将升级您的所有软件包并更新需求文件,而无需您的任何输入。
    • 不为我分叉。终于有帮助了: pip install -r requirements.txt --upgrade
    【解决方案7】:

    这为我解决了这个问题:

    pip install -I --upgrade psutil --force
    

    之后只需用新版本卸载 psutil,然后你就可以突然安装旧版本(:

    【讨论】:

      【解决方案8】:

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

      pip3 install larapy-installer==0.4.01 -U
      

      【讨论】:

        【解决方案9】:

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

        1. 您使用了--no-install 选项
        2. 您正在使用可编辑包
        3. 安装已取消或以其他方式中断。

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

        【讨论】:

          【解决方案10】:

          我用这个:

          pip3 install -r  requirements.txt  
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-04-09
            • 2012-10-22
            • 1970-01-01
            • 2021-11-10
            • 2019-12-14
            • 2015-05-09
            • 2013-06-17
            相关资源
            最近更新 更多