如何使用pip要求文件卸载以及安装包?

wod*_*dow 71 python pip

我有一个在开发过程中发生变化的pip需求文件.

可以pip被制成卸载,不会出现在需求文件以及安装那些确实出现包?有标准的方法吗?

这将允许pip需求文件成为包的规范列表 - "if if only only"方法.

更新:我在https://github.com/pypa/pip/issues/716上将其建议为新功能

Ste*_*hry 106

这应该卸载不在requirements.txt中的任何内容:

pip freeze | grep -v -f requirements.txt - | grep -v '^#' | xargs pip uninstall -y
Run Code Online (Sandbox Code Playgroud)

虽然这对于安装的软件包-e(即从git存储库或类似软件包中)来说无法正常工作.要跳过这些,只需过滤掉以-e标志开头的包:

pip freeze | grep -v -f requirements.txt - | grep -v '^#' | grep -v '^-e ' | xargs pip uninstall -y
Run Code Online (Sandbox Code Playgroud)

然后,显然:

pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

2016年更新: 您可能并不真的想要实际使用上述方法.查看pip-toolspip-sync以更加强大的方式完成您可能要做的事情.

https://github.com/nvie/pip-tools

2016年5月更新:

你现在也可以使用pip uninstall -r requirements.txt,但这完全相反 - 它卸载了所有内容requirements.txt

  • 那样就好了.在我看来,如果他们手动在一台主机上安装某些东西而不更新他们的requirements.txt,就可以通过打破所有内容来强制开发人员明确他们的依赖关系.我有兴趣看看添加该功能的pull请求会产生什么样的反馈. (5认同)

dbr*_*dbr 15

这不是特征pip,不是.如果你真的想要这样的东西,你可以写一个脚本来比较pip freeze你的输出requirements.txt,但它可能比它的价值更麻烦.

使用virtualenv,创建一个干净的环境和(重新)安装更简单,更可靠requirements.txt,如:

deactivate
rm -rf venv/
virtualenv venv/
source venv/bin/activate
pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

  • 如果某些软件包(PIL,lxml等)需要冗长的编译,那么卸载不在需求文件中的软件包会很有用 - 特别是如果这是在使用虚拟环境的实时服务器上进行的话. (6认同)
  • @MichaelMior我会更明确地说明我原来的评论.看起来你可能误解了我的观点.想象一下包含PIL和lxml的简单需求文件.但是,您决定不再需要lxml,并将其从需求文件中删除.如果您按照此答案建议,并擦除virtualenv,则必须重新安装(并重新编译)PIL.可以选择简单地卸载lxml(即所有包不在需求文件中). (3认同)

小智 15

您可以使用所有已安装的软件包创建一个新文件

pip freeze > uninstall.txt
Run Code Online (Sandbox Code Playgroud)

然后卸载所有这些

pip uninstall -r uninstall.txt -y
Run Code Online (Sandbox Code Playgroud)

然后最后重新安装原始requirements.txt文件中的软件包

pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)


Mic*_*ior 12

简短的回答是不,你不能用pip做到这一点.

  • 斯蒂芬在下面说:`pip uninstall -r requirements.txt` (20认同)
  • @Ommit这不会卸载未出现在需求文件中的软件包.它会卸载出现在文件中的所有软件包. (18认同)
  • @Micheal Mior,啊,我没有足够关注最初的问题。我的错。 (3认同)
  • 在@Ommit的命令中添加`-y`以避免必须按Y并输入很多次.从错误中吸取教训. (3认同)
  • 只需添加:`pip uninstall -rrequirements.txt`只会卸载您的requirements.txt中的版本。例如,如果您卸载“boto3==1.10.0”,则“pip freeze”将显示“boto3==1.0.1”(如果您之前安装过它(或任何旧版本))。 (2认同)

Shi*_*eph 7

现在,您可以将-r requirements.txt参数传递给pip uninstall

pip uninstall -r requirements.txt -y
Run Code Online (Sandbox Code Playgroud)

至少从pip8.1.2开始,pip help uninstall显示:

...
Uninstall Options:
  -r, --requirement <file>    Uninstall all the packages listed in the given requirements file.  This option can be
                              used multiple times.
...
Run Code Online (Sandbox Code Playgroud)

  • 这不会卸载文件中未出现的软件包。它卸载*确实*出现在文件中的软件包。 (3认同)

小智 7

这是一个有效的简单解决方案:

pip uninstall $(pip freeze) -y