What is the easiest way to remove all packages installed by pip?
我正在尝试修复我的一个virtualenv——我想将所有已安装的库重置为与生产相匹配的库。
有没有一种简单快捷的方法来处理PIP?
我发现这段代码是另一种解决方案。移除库比重新构建virtualenv更优雅:
1 | pip freeze | xargs pip uninstall -y |
如果您通过VCS安装了软件包,则需要排除这些行并手动删除软件包(从下面的注释中提升):
1 | pip freeze | grep -v"^-e" | xargs pip uninstall -y |
这将适用于所有Mac、Windows和Linux系统。要获取requirements.txt文件中所有PIP包的列表(注意:如果存在,这将覆盖requirements.txt,否则将创建新的一个)。
1 | pip freeze > requirements.txt |
现在逐个删除
1 | pip uninstall -r requirements.txt |
如果我们想一次全部删除,那么
1 | pip uninstall -r requirements.txt -y |
如果您正在处理一个已有
对于不创建任何文件的单个命令(如joeb建议的那样)。
1 | pip uninstall -y -r <(pip freeze) |
我想这是最新的
1 | virtualenv --clear MYENV |
我想把这个答案从评论部分中提出来,因为它是这个主题中最优雅的解决方案之一。这个答案的全部学分归@joeb所有。
1 | pip uninstall -y -r <(pip freeze) |
这对我来说非常有用,因为在虚拟环境的上下文之外清除我的用户包文件夹,这是上面许多答案都无法处理的。
编辑:有人知道如何使这个命令在makefile中工作吗?
额外奖励:一个bash别名为了方便起见,我将此添加到我的bash配置文件中:
1 | alias pipuninstallall="pip uninstall -y -r <(pip freeze)" |
然后运行:
1 | pipuninstallall |
Pipenv的替代方案
如果您碰巧使用pipenv,则可以运行:
1 | pipenv uninstall --all |
方法1(用
1 | pip freeze | xargs pip uninstall -y |
方法2(使用
1 | pip list | awk '{print $1}' | xargs pip uninstall -y |
方法3(使用
1 | virtualenv --clear MYENV |
使用
这是我经常用到的片段
1 | pip freeze --local | xargs pip uninstall -y |
或
1 | pip list --local | py -x"print(x.split()[0])" | xargs pip uninstall -y |
通过发布
最快的方法是完全重新构建virtualenv。我假设您有一个与生产相匹配的requirements.txt文件,如果没有:
1 2 3 4 5 6 7 | # On production: pip freeze > reqs.txt # On your machine: rm $VIRTUALENV_DIRECTORY mkdir $VIRTUALENV_DIRECTORY pip install -r reqs.txt |
在Windows上,如果您的
1 | pip freeze > unins && pip uninstall -y -r unins && del unins |
对于类Unix系统,应该是类似的情况:
1 | pip freeze > unins && pip uninstall -y -r unins && rm unins |
这只是一个警告,即这不是完全可靠的,因为您可能会遇到诸如"找不到文件"之类的问题,但在某些情况下它可能仍然有效。
编辑:为了清晰起见:
然后,在获得
文件完成后最终被删除。
使用virtualenvwrapper函数:
1 | wipeenv |
参见WipeEnv文档
对于Windows用户,这是我在Windows PowerShell上使用的
1 | pip uninstall -y (pip freeze) |
这是一个我知道的老问题,但我确实偶然发现了它,所以为了将来参考,您现在可以这样做:
1 2 | pip uninstall [options] <package> ... pip uninstall [options] -r <requirements file> ... |
-r, --requirement file
Uninstall all the packages listed in the given requirements file. This option can be used multiple times.
< /块引用>
来自PIP文档版本8.1
这是我卸载所有python包最简单的方法。
1
2
3
4 from pip import get_installed_distributions
from os import system
for i in get_installed_distributions():
system("pip3 uninstall {} -y -q".format(i.key))首先,将所有包添加到EDOCX1[0]
1 pip freeze > requirements.txt然后删除所有
1 pip uninstall -y -r requirements.txt这是我的命令:
1 pip list | awk '{print $1}' | xargs pip uninstall -y仅使用
pip 的跨平台支持:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 #!/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.如果您使用的是
pew ,则可以使用wipeenv命令:
pew wipeenv [env] 在我的例子中,我不小心使用在MacOS上安装的自制
pip 在全球安装了许多软件包。恢复默认包的最简单方法是:
1 $ brew reinstall python或者,如果您使用的是
pip3 :
1 $ brew reinstall python3
In Command Shell of Windows, the command
pip freeze | xargs pip uninstall -y won't work. So for those of you using Windows, I've figured out an alternative way to do so.将已安装的pip包的所有名称从 pip freeze 命令复制到.txt文件中。然后,转到.txt文件的位置并运行命令 pip uninstall -r *textfile.txt* 如果你在运行
virtualenv :
1 virtualenv --clear </path/to/your/virtualenv>例如,如果您的virtualenv是
/Users/you/.virtualenvs/projectx ,那么您将运行:
1 virtualenv --clear /Users/you/.virtualenvs/projectx如果不知道虚拟env的位置,可以在激活的虚拟env中运行
which python ,以获取路径。PIP无法知道它安装了哪些包,以及系统的包管理器安装了哪些包。为此你需要做这样的事
对于基于RPM的发行版(将python2.7替换为安装了pip的python版本):
1
2
3
4
5 find /usr/lib/python2.7/ |while read f; do
if ! rpm -qf"$f" &> /dev/null; then
echo"$f"
fi
done |xargs rm -fr对于基于DEB的分发:
1
2
3
4
5 find /usr/lib/python2.7/ |while read f; do
if ! dpkg-query -S"$f" &> /dev/null; then
echo"$f"
fi
done |xargs rm -fr然后清除剩余的空目录:
1 find /usr/lib/python2.7 -type d -empty |xargs rm -fr我发现最上面的答案很误导人,因为它将删除所有(大多数?)。来自您的发行版的python包,可能会给您留下一个损坏的系统。