目前,当我们的项目的requirements.txt更新时,我们从头开始重新构建virtualenv以确保一致的结果。问题是我们的requirements.txt非常冗长,对它的更新通常只触及一个包。
是否有任何系统将virtualenv与requirements.txt进行比较并进行最少量的更改以使它们匹配?
我可以自己写这个,如果我能得到pip告诉我将安装哪个版本给出一个requirements.txt,但我没有看到这样的选项。
答案 0 :(得分:5)
我想知道,为什么简单
$ pip install -r requirements.txt --upgrade
还不够吗?
它会将当前的virtualenv与您的要求进行比较,并且只进行必要的更新。
关于删除不需要的包 - 真的有必要吗?如果你真的坚持它,我会创建unwanted-requirements.txt
,然后在通过之前的调用更新包之前我会执行:
$ pip uninstall -r unwanted-requirements.txt
接下来是$ pip install ...`
如果你的系统保持一致,你的系统应该工作得很好,如果你在unwanted-requirements.txt
中犯了错误,你的系统很可能存活,因为在大多数情况下,未使用的包不是有害并已删除通缉的包裹将在随后的$ pip install ...
如果您真正关心的不仅是一致的安装,而且还要快速更新,那么如果加快工作速度,还有很好的工作方法。请参阅我的回答https://stackoverflow.com/a/18520729/346478
答案 1 :(得分:0)
我们这样做:当发出一个提交(我们使用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