【问题标题】:update a virtualenv to match requirements.txt更新 virtualenv 以匹配 requirements.txt
【发布时间】:2014-06-21 22:24:28
【问题描述】:

目前,当我们项目的 requirements.txt 更新时,我们会从头开始重新构建我们的 virtualenv 以确保结果一致。问题是我们的 requirements.txt 很长,而且它的更新通常只涉及一个包。

是否有任何系统可以将 virtualenv 与 requirements.txt 进行比较,并进行最少的更改以使它们匹配?

如果我可以让 pip 告诉我在给定 requirements.txt 的情况下它会安装哪些版本,我可能会自己写这个,但我没有看到这样的选项。

【问题讨论】:

    标签: python pip virtualenv requirements.txt


    【解决方案1】:

    通过 pip install 更新

    我想知道,为什么这么简单

    $ pip install -r requirements.txt --upgrade
    

    还不够吗?

    它会将当前的 virtualenv 与您的要求进行比较,并且只进行必要的更新。

    删除不需要的包

    关于删除不需要的包 - 这真的有必要吗?如果你真的坚持,我会创建 unwanted-requirements.txt 并在通过之前的调用更新包之前执行:

    $ pip uninstall -r unwanted-requirements.txt
    

    后跟 $ pip install ...`

    如果你保持你的系统和你想象的一样一致,这应该会很好地工作,如果你在unwanted-requirements.txt中出错,你的系统很可能会存活下来,因为未使用的包在大多数情况下是无害的,并且已移除通缉包将在后续$ pip install ...

    恢复

    加快安装速度

    如果您真正关心的不仅是安装一致,而且要快速更新它们,那么有很好的工作方法可以加快速度。请参阅我的 SO 回答 https://stackoverflow.com/a/18520729/346478

    【讨论】:

      【解决方案2】:

      我们这样做是这样的:当提交提交时(我们使用 git),它会触发一个钩子,该钩子执行一个自定义编写的 bash 脚本,该脚本激活 virtualenv,运行 pip install -r requirements.txt 检查一切是否符合要求date 并仅安装需要升级和停用 virtualenv 的软件包。

      我不知道这是否对您有用,因为您没有发布有关您的环境的详细信息,但您明白了。此外,你的 requirements.txt 有多长也没有关系,因为如果你完全重建你的 virtualenv,pip 只会重新安装一些包,而不是从头开始安装所有东西。

      编辑:

      如果你还需要卸载 requirements.txt 中没有的包,你可以使用类似的东西:

      pip freeze | grep -v -f requirements.txt - | xargs pip uninstall -y
      

      只有在那之后:

      pip install -r requirements.txt
      

      【讨论】:

      • 这种方法的主要问题是删除了包;如果我只是 pip install -r 删除一个包,新用户和旧用户将得到不同的最终结果。
      • pip freeze | grep -v -f requirements.txt - | xargs pip uninstall -y 这行很有帮助
      猜你喜欢
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2023-03-13
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2019-06-21
      相关资源
      最近更新 更多