我对我的 Python 安装 (2 和 3) 进行了大量尝试,安装了许多软件包,一些使用apt-get
,但大多数使用pip
。我还将许多apt
使用 安装 的软件包升级pip
到了较新的版本。
我的问题是:
我怎样才能撤消所有这些更改,删除所有pip
已安装的 Python 包,并仅保留其默认存储库版本中的默认预安装包集,以及由apt-get
其他软件安装但仅作为其依赖项的包,并在必要时始终降级到存储库版本。
我想这样做是为了为系统提供一个整洁的 Python 环境,并且仅在虚拟环境中进行我的修改。
不重新安装系统可以实现吗?我该如何处理?
答案1
我将首先列出所管理的 Python 包apt-get
(下面的一行代码需要几秒钟才能运行,请耐心等待):
$ for pyfile in `ls /usr/lib/python2.7/dist-packages`; do dpkg -S "/usr/lib/python2.7/dist-packages/${pyfile}" | sed 's/:.*//g'; done | sort -u
注意:如有必要,请将 2.7 替换为您感兴趣的任何 Python 版本。
接下来,卸载手动安装的软件包。如果你不确定安装了哪些软件包,可以使用以下命令获取所有手动安装的软件包的列表(请参阅这个问题):
$ comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
然后卸载你手动安装的 Python 包,例如:
$ sudo apt-get remove python-tk python-scipy
接下来,您想知道使用 pip 安装了哪些包:
$ ls -ltd /usr/local/lib/python2.7/dist-packages/*
此命令按上次修改日期排序列出 pip 安装目录的内容,让您更轻松地找到自己安装的软件包。例如,我安装了 Google 的gcloud
工具,该工具会安装一堆我不想卸载的 pip 软件包,但查看列表很容易发现它们都是在同一时间安装的,所以我知道哪些应该保留,哪些可以卸载。在卸载任何 pip 软件包之前,您应该对已安装的软件包列表进行快照:
$ sudo pip freeze > $HOME/pip_freeze_snapshot.txt
然后只需卸载您想要的软件包,例如:
$ sudo pip uninstall py pytest
最后,不要忘记您的用户目录中可能已经安装了某些 pip 包。也许您对此不介意,但如果不介意,您可以列出它们:
$ ls -ltd $HOME/.local/lib/python2.7/site-packages/*
如果你想删除所有这些包,你可以删除这个目录。否则,只需卸载单个包,例如:
$ pip uninstall tensorflow
不要忘记检查其他 Python 版本(例如 3.5)。