恢复Python安装默认加上apt包依赖

Byt*_*der 16 package-management python apt pip

我玩了很多我的 Python 安装(2 和 3)并安装了一堆包,一些apt-get使用pip. 我还将许多已apt安装的软件包升级pip到更新的版本。

我的问题是:
如何撤消所有这些更改,删除所有已pip安装的 Python 包,并将默认的预安装包保留在其默认存储库版本中,以及由apt-get其他软件安装但仅作为依赖项安装的软件包,始终降级到存储库如有必要,版本。

我想这样做是为了为系统整理一个 Python 环境,并且只在 virtualenvs 中进行修改。

不重装系统可以吗?我将如何处理它?

小智 6

我将首先列出由管理的 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
Run Code Online (Sandbox Code Playgroud)

注意:如有必要,请将 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)
Run Code Online (Sandbox Code Playgroud)

然后卸载你手动安装的Python包,例如:

$ sudo apt-get remove python-tk python-scipy
Run Code Online (Sandbox Code Playgroud)

接下来,您想知道您使用 pip 安装了哪些软件包:

$ ls -ltd /usr/local/lib/python2.7/dist-packages/*
Run Code Online (Sandbox Code Playgroud)

该命令列出了 pip 的安装目录内容,按照最后修改日期排序,方便查找自己安装的包。例如,我安装了 Google 的gcloud工具,它安装了一堆我不想卸载的 pip 包,但是查看列表很容易看到它们都是在同一时间安装的,所以我知道我应该安装哪些离开,我可以卸载哪些。在卸载任何 pip 软件包之前,您应该对已安装的软件包列表进行快照:

$ sudo pip freeze > $HOME/pip_freeze_snapshot.txt
Run Code Online (Sandbox Code Playgroud)

然后只需卸载您想要的软件包,例如:

$ sudo pip uninstall py pytest
Run Code Online (Sandbox Code Playgroud)

最后,不要忘记一些 pip 包可能已经安装在您的用户目录中。也许您对此没有意见,但如果没有,您可以列出它们:

$ ls -ltd $HOME/.local/lib/python2.7/site-packages/*
Run Code Online (Sandbox Code Playgroud)

如果你想摆脱所有这些包,你可以删除这个目录。否则,只需卸载单个软件包,例如:

$ pip uninstall tensorflow
Run Code Online (Sandbox Code Playgroud)

不要忘记检查其他 python 版本(例如,3.5)。