我正在尝试修复我的一个版本 - 我想将所有已安装的库重置为与生产相匹配的库。
使用pip有一种快速简便的方法吗?
答案 0 :(得分:718)
我发现这个代码段作为替代解决方案。与重塑virtualenv相比,删除库更为优雅:
pip freeze | xargs pip uninstall -y
如果您通过VCS安装了软件包,则需要手动排除这些行并删除软件包(从以下评论中提升):
pip freeze | grep -v "^-e" | xargs pip uninstall -y
答案 1 :(得分:212)
这适用于所有Mac,Windows和Linux系统。 要获取requirements.txt文件中所有pip包的列表(注意:这将覆盖requirements.txt,如果存在则会创建新的。)
pip freeze > requirements.txt
现在逐一删除
pip uninstall -r requirements.txt
如果我们想立即删除所有
pip uninstall -r requirements.txt -y
如果您正在处理具有requirements.txt
文件并且您的环境出现分歧的现有项目,只需使用requirements.txt
替换上述示例中的toberemoved.txt
即可。然后,完成上述步骤后,您可以使用requirements.txt
更新现在清洁的环境。
对于没有创建任何文件的单个命令(如joeb建议的那样)。
pip uninstall -y -r <(pip freeze)
答案 2 :(得分:91)
我认为这适用于最新的
virtualenv --clear MYENV
但通常我只是删除并重新创建virtualenv。
答案 3 :(得分:59)
我想从评论部分提出这个答案,因为它是该主题中最优雅的解决方案之一。这个答案完全归功于@joeb。
pip uninstall -y -r <(pip freeze)
对于我在上述许多答案无法处理的virtualenv上下文之外清除用户包文件夹的用例,这对我很有用。
编辑:任何人都知道如何在Makefile中使用此命令?
为方便起见,我将此添加到我的bash配置文件中:
alias pipuninstallall="pip uninstall -y -r <(pip freeze)"
然后运行:
pipuninstallall
如果你碰巧使用pipenv,你可以运行:
pipenv uninstall --all
答案 4 :(得分:38)
pip freeze
)pip freeze | xargs pip uninstall -y
pip list
)pip list | awk '{print $1}' | xargs pip uninstall -y
virtualenv
)virtualenv --clear MYENV
答案 5 :(得分:28)
使用pip list
或pip freeze
的其他答案必须包含--local
,否则它还会卸载常见名称空间中的软件包。
以下是我经常使用的片段
pip freeze --local | xargs pip uninstall -y
或
pip list --local | py -x "print(x.split()[0])" | xargs pip uninstall -y
通过发出pip freeze --help
答案 6 :(得分:18)
最快的方法是完全重塑virtualenv。我假设你有一个匹配生产的requirements.txt文件,如果没有:
# On production:
pip freeze > reqs.txt
# On your machine:
rm $VIRTUALENV_DIRECTORY
mkdir $VIRTUALENV_DIRECTORY
pip install -r reqs.txt
答案 7 :(得分:16)
在Windows上,如果path
配置正确,您可以使用:
pip freeze > unins && pip uninstall -y -r unins && del unins
对于类Unix系统应该是类似的情况:
pip freeze > unins && pip uninstall -y -r unins && rm unins
只是警告说这不是完全可靠的,因为您可能会遇到诸如“未找到文件”之类的问题,但在某些情况下它可能会起作用
编辑:为清楚起见:unins
是一个任意文件,在执行此命令时会向其写出数据:pip freeze > unins
然后,通过pip uninstall -y -r unins
文件最终会在完成后删除。
答案 8 :(得分:13)
答案 9 :(得分:10)
我通过以下操作对其进行了管理:
使用当前安装的软件包列表创建名为 reqs.txt 的需求文件
pip freeze > reqs.txt
然后从 reqs.txt
卸载所有软件包pip uninstall \
-y # remove the package with prompting for confirmation
-r reqs.txt
我喜欢这种方法,因为您总是有一个pip要求文件,以防您出错。这也是可重复的。
答案 10 :(得分:7)
我使用--user选项卸载用户站点中安装的所有软件包。
pip3 freeze --user | xargs pip3 uninstall -y
答案 11 :(得分:7)
对于Windows用户,这是我在 Windows PowerShell
上使用的内容 pip uninstall -y (pip freeze)
答案 12 :(得分:5)
这是我所知道的一个老问题,但我偶然发现了它,以便将来参考,你现在可以这样做:
pip uninstall [options] <package> ...
pip uninstall [options] -r <requirements file> ...
-r, - 要求文件
卸载给定需求文件中列出的所有软件包。此选项可以多次使用。
来自pip documentation版本8.1
答案 13 :(得分:4)
从虚拟环境中删除所有包的最佳方法
Windows 环境使用以下命令:
pip freeze > unins && pip uninstall -y -r unins && del unins
Linux 环境使用以下命令:
pip freeze > unins && pip uninstall -y -r unins && rm unins
答案 14 :(得分:3)
这是我卸载所有python包的最简单方法。
from pip import get_installed_distributions
from os import system
for i in get_installed_distributions():
system("pip3 uninstall {} -y -q".format(i.key))
答案 15 :(得分:3)
pip3 freeze --local | xargs pip3 uninstall -y
情况可能是必须多次运行此命令才能获得空的pip3 freeze --local
。
答案 16 :(得分:3)
首先,将所有软件包添加到requirements.txt
pip freeze > requirements.txt
然后全部删除
pip uninstall -y -r requirements.txt
答案 17 :(得分:2)
仅使用pip
:
#!/usr/bin/env python
from sys import stderr
from pip.commands.uninstall import UninstallCommand
from pip import get_installed_distributions
pip_uninstall = UninstallCommand()
options, args = pip_uninstall.parse_args([
package.project_name
for package in
get_installed_distributions()
if not package.location.endswith('dist-packages')
])
options.yes = True # Don't confirm before uninstall
# set `options.require_venv` to True for virtualenv restriction
try:
print pip_uninstall.run(options, args)
except OSError as e:
if e.errno != 13:
raise e
print >> stderr, "You lack permissions to uninstall this package.
Perhaps run with sudo? Exiting."
exit(13)
# Plenty of other exceptions can be thrown, e.g.: `InstallationError`
# handle them if you want to.
答案 18 :(得分:2)
这是对我有用的命令:
pip list | awk '{print $1}' | xargs pip uninstall -y
答案 19 :(得分:1)
如果您使用的是pew
,则可以使用wipeenv命令:
pew wipeenv [env]
答案 20 :(得分:1)
在Windows的命令行管理程序中,命令
pip freeze | xargs pip uninstall -y
无法正常工作。所以对于那些使用Windows的人来说,我已经想出了另一种方法。
pip freeze
命令复制到 .txt 文件。pip uninstall -r *textfile.txt*
答案 21 :(得分:1)
简单而健壮的方法 跨平台 在pipenv中的工作方式也是:
pip freeze
pip uninstall -r requirement
通过pipenv:
pipenv run pip freeze
pipenv run pip uninstall -r requirement
但不会更新piplock或pipfile,因此请注意
答案 22 :(得分:1)
在我的情况下,我在macOS上使用Homebrew安装的pip
意外地安装了许多软件包。恢复默认包的最简单方法是:
$ brew reinstall python
或者,如果您使用pip3
:
$ brew reinstall python3
答案 23 :(得分:1)
如果您正在运行virtualenv
:
virtualenv --clear </path/to/your/virtualenv>
例如,如果你的virtualenv是/Users/you/.virtualenvs/projectx
,那么你就运行:
virtualenv --clear /Users/you/.virtualenvs/projectx
如果您不知道虚拟环境的位置,可以从激活的虚拟环境中运行which python
以获取路径
答案 24 :(得分:1)
在 Windows 上,如果您的路径配置正确,您可以使用:
pip freeze > unins && pip uninstall -y -r unins && del unins
答案 25 :(得分:0)
这适用于我的 Windows 系统
pip freeze > packages.txt && pip uninstall -y -r packages.txt && del packages.txt
第一部分 pip freeze > packages.txt
创建一个文本文件,其中包含使用 pip 安装的软件包列表以及版本号
第二部分 pip uninstall -y -r packages.txt
在不要求确认提示的情况下删除所有已安装的软件包。
第三部分del packages.txt
删除刚刚创建的packages.txt。
答案 26 :(得分:0)
我只是想删除项目安装的包,而不是我安装的其他包(例如 neovim
、mypy
和 pudb
之类的东西,我用于本地开发,但不包括在应用程序要求中)。所以我做到了:
cat requirements.txt| sed 's/=.*//g' | xargs pip uninstall -y
这对我来说效果很好。
答案 27 :(得分:0)
(将此添加为答案,因为我没有足够的声誉来评论@blueberryfields的答案)
@blueberryfields的答案很好用,但是如果没有要卸载的软件包会失败(如果此“全部卸载”是脚本或makefile的一部分,则可能会出现问题)。使用GNU版本的xargs -r
时,可以使用xargs
解决此问题:
pip freeze --exclude-editable | xargs -r pip uninstall -y
来自man xargs
:
-r,--no-run-if-empty
如果标准输入不包含任何非空格,请不要运行该命令。通常,即使存在 没有输入。此选项是GNU扩展。
答案 28 :(得分:-2)
Pip无法知道它安装了哪些软件包以及系统软件包管理器安装了哪些软件包。为此你需要做这样的事情
对于基于rpm的发行版(用您安装pip的python版本替换python2.7):
find /usr/lib/python2.7/ |while read f; do
if ! rpm -qf "$f" &> /dev/null; then
echo "$f"
fi
done |xargs rm -fr
用于基于deb的分发:
find /usr/lib/python2.7/ |while read f; do
if ! dpkg-query -S "$f" &> /dev/null; then
echo "$f"
fi
done |xargs rm -fr
然后清理剩下的空目录:
find /usr/lib/python2.7 -type d -empty |xargs rm -fr
我发现最佳答案非常容易引起误解,因为它会从您的发行版中删除所有(大多数?)python包,并且可能会让您的系统崩溃。