将Python安装恢复为默认设置以及apt软件包依赖关系


14

我在安装Python(第2个和第3个)方面玩了很多,并安装了一堆软件包,其中一些使用apt-get,但大多数使用pip。我也将许多已apt安装的软件包升级pip到了较新的版本。

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

我想要这样做是为了为系统提供一个经过整理的Python环境,并且仅在virtualenvs中进行修改。

没有重新安装系统是否可以实现?我将如何处理?


Answers:


5

我将首先列出受其管理的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)。


我建议您发布一条公共安全公告,其中删除过多的软件包可能会使您的系统瘫痪,但这是一个很好的指南。(例如,我很高兴自己做了mv而不是rm自己做,/usr/local/lib/python3.6因为几分钟后我发现我需要在那里做一些相当基本的系统功能
。– craq
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.