将Python安装还原为默认加上apt包依赖项

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

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

我希望这样做可以为系统提供一个整洁的Python环境,并且只对virtualenvs进行修改。

没有重新安装系统可能吗? 我该如何接近它?

我首先列出由apt-get管理的Python包(下面的一行需要几秒钟才能运行,请耐心等待):

 $ 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安装目录的内容,以便更容易找到您自己安装的软件包。 例如,我安装了谷歌的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)。