如何从当前已激活的虚拟环境中卸载由pip安装的所有软件包?
如何从当前已激活的虚拟环境中卸载由pip安装的所有软件包?
我找到了这段代码作为一种替代解决方案。与重新创建虚拟环境相比,它更加优雅地删除库:
pip freeze | xargs pip uninstall -y
如果您安装了通过版本控制系统(VCS)的软件包,则需要排除这些行并手动删除这些软件包(根据下面的评论提升):
pip freeze | grep -v "^-e" | xargs pip uninstall -y
如果你直接从github/gitlab安装了软件包,那么它们会带有@
符号。
例如:
django @ git+https://github.com/django.git@<sha>
你可以添加cut -d "@" -f1
来获取只需要卸载该软件包的名称。
pip freeze | cut -d "@" -f1 | xargs pip uninstall -y
postactivate
等进行了更改,这些更改将保留下来。 - niceguydavepip freeze --exclude-editable | xargs pip uninstall -y
命令来忽略版本控制系统中的软件包,而无需使用 grep 模式。该命令不会改变原意,只是让语言更加通俗易懂。 - Connor Brintonpip freeze
列出所有包,包括在操作系统中安装的包。用户无法(或可能不想)在没有根权限的情况下删除它们。 pip freeze --user
对我有效。 - user1079505pip list --format=freeze |xargs pip uninstall -y
就解决了问题。 - skynet1010这适用于所有的Mac、Windows和Linux系统。 要获取requirements.txt文件中所有pip包的列表(注意:如果存在,这将覆盖requirements.txt,否则将创建新的文件,如果您不想替换旧的requirements.txt,则在以下所有命令中提供不同的文件名以代替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提出了以下建议suggested
pip uninstall -y -r <(pip freeze)
pip uninstall -r requirements.txt -y
。 - David Metcalfepip uninstall -y -r <(pip freeze)
一次性完成所有操作。 - joebeeson我想把这个答案从评论区提升出来,因为它是该讨论串中最优雅的解决方案之一。全文鸣谢@joeb。
pip uninstall -y -r <(pip freeze)
对于我而言,在虚拟环境之外清除用户包文件夹的用例中,这对我非常有效,而上面的许多答案都无法处理。
编辑:有人知道如何在Makefile中使此命令工作吗?
我将其添加到我的bash配置文件中以便于使用:
alias pipuninstallall="pip uninstall -y -r <(pip freeze)"
然后运行:
pipuninstallall
如果您正在使用pipenv,您可以运行以下命令:
pipenv uninstall --all
如果您正在使用Poetry,请运行:
poetry env remove --python3.9
(请注意,您需要更改那里的版本号以匹配您的Python版本。)
pip freeze
不会输出任何内容,然后pip uninstall
会出错)。 - Eric G<(...)
是一种 bashism。因此您可以使用 bash -c“...”,或者通过执行 pip freeze | pip uninstall -r /dev/stdin
来解决问题。 - Caesar错误:无法卸载'bitarray'。它是一个distutils安装的项目,因此我们无法准确确定哪些文件属于它,这将导致部分卸载。
- SeaDudeSHELL := /usr/bin/env bash
。参见https://www.gnu.org/software/make/manual/html_node/Choosing-the-Shell.html。 - Jens这适用于最新版本。我认为这是最短、最直接的方法。
virtualenv --clear MYENV
为什么不直接删除并重新创建虚拟环境呢?
因为不变性原则。而且其他解决方案使用管道和grep时很难记住所有内容。
wipeenv
命令效果相同?http://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html#wipeenv - Taylor D. Edmistonwipeenv
会抛出错误,并且如果在 pip install -e
开发构建的上下文中使用,则不会删除任何内容。但尝试使用 virtualenv --clear MYENV
不会抛出错误,并且也不会删除之前可能在环境中安装的任何包。至少在OSX上是这种情况。有关更多信息,请参见https://bitbucket.org/dhellmann/virtualenvwrapper/issues/211/wipeenv-does-not-work-when-pip-install-e。 - mpacerwipeenv
是 virtualenvwrapper 提供的别名,因此并非每个人都有它。 - Jonathan Hartley我通过以下方式完成了它:
reqs.txt
的要求文件,其中包含当前安装的软件包列表pip freeze > reqs.txt
reqs.txt
卸载所有的软件包。# -y means remove the package without prompting for confirmation
pip uninstall -y -r reqs.txt
我喜欢这种方法,因为你可以随时依靠pip需求文件来纠正错误。而且它是可重复的,并且跨平台(Windows、Linux、MacOS)。
其他使用 pip list
或 pip freeze
的答案必须包含 --local
,否则它也会卸载在通用命名空间中找到的软件包。
这是我经常使用的代码片段:
pip freeze --local | xargs pip uninstall -y
参考:pip freeze --help
ERROR: Cannot uninstall 'bitarray'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
之后,我就无法卸载任何其他模块了。 - SeaDudepip freeze
)pip freeze | xargs pip uninstall -y
pip list
)pip list | awk '{print $1}' | xargs pip uninstall -y
virtualenv
)virtualenv --clear MYENV
pip list
)在你的 pip 不小心被卸载之前是很好用的 -_- - Justinpip list | awk '{print $1}' | grep -vE "^pip$|^Package$|^---" | xargs pip uninstall -y
- Menda在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
以暗示同意/预先批准的方式卸载上述软件包。
完成后,该文件将被删除。
我使用--user选项来卸载安装在用户站点中的所有软件包。
pip3 freeze --user | xargs pip3 uninstall -y
pip3 freeze | xargs pip3 uninstall -y
==>
PermissionError: [Errno 13] Permission denied: '/usr/local/bin/ap' -> '/tmp/pip-uninstall-q9gzbj0d/ap'
- SL5net--user
选项的好处在于它只列出用户安装的包,而不是本地安装的所有包。因为--local
会列出本地安装的所有包,而不仅仅是用户安装的包。 - somenxavier对于Windows用户来说,这是我在Windows PowerShell上使用的方法。
pip uninstall -y (pip freeze)