如何从 Ubuntu 中删除所有 Python 痕迹

如何从 Ubuntu 中删除所有 Python 痕迹

我想从我的 Ubuntu 中清除所有 Python 痕迹。有什么简单的解决方案吗?

首先,我想我应该删除所有 pip 包。我尝试了建议的命令这里,但收到一堆失败消息:

#pip3 freeze | xargs pip3 uninstall -y
Found existing installation: appdirs 1.4.4
Uninstalling appdirs-1.4.4:
  Successfully uninstalled appdirs-1.4.4
Found existing installation: attrs 19.3.0
Not uninstalling attrs at /usr/lib/python3/dist-packages, outside environment /usr
Can't uninstall 'attrs'. No files were found to uninstall.
Found existing installation: Automat 0.8.0
Not uninstalling automat at /usr/lib/python3/dist-packages, outside environment /usr
Can't uninstall 'Automat'. No files were found to uninstall.
...

我应该怎么办?答案要求运行:

sudo rm -rf /usr/local/lib/python2.7/dist-packages/twitter

我应该运行吗?我在以下路径中有 py 文件:

  • \usr\lib\python2.7
  • \usr\lib\python3\dist-packages
  • \usr\lib\python3.8

未被接受的答案要求做:

sudo apt remove python-numpy

我目前使用的是 wsl2 Ubuntu。我很谨慎,因为今天,我(可能)搞砸了我的另一个 Ubuntu 安装,不小心删除了上述所有pythonXYZ文件夹。现在我既无法删除所有 python 痕迹,也无法在那台机器上重新安装 python。它一直给我一些错误(也许我不得不为此提出单独的问题)。但是我该如何修复这个 WSL Ubuntu?

答案1

Ubuntu 严重依赖不同的Python版本功能。Ubuntu 的新版本正在慢慢转向Python3,但旧版本的 Python 仍在使用。

您可以列出系统上依赖于的一些重要的 Ubuntu 和 Gnome 软件包Python3,例如像这样:

apt-cache rdepends -i --installed --recurse python3 | \
grep -v " " | sort -u | grep -E "ubuntu|gnome"

Ubuntu 20.10桌面,这些重要的其中包括:

gnome-control-center
gnome-session
gnome-terminal
network-manager-gnome
ubuntu-desktop
ubuntu-desktop-minimal
ubuntu-drivers-common
ubuntu-minimal
ubuntu-release-upgrader-core
ubuntu-release-upgrader-gtk
ubuntu-session
ubuntu-standard
ubuntu-system-service

而且,不存在这样的 Python 干净状态。每次系统更新和安装的每个包都可能带来与 Python 相关的依赖项。

但是你可以使用点子或者pip3卸载仅有的您之前手动安装的软件包甚至也并非完全没有风险。

如果你已经删除了 Python,请尝试或者如果你需要修复。不过机会很小。如果你能修复它,那你就很幸运了。

黄金法则...不要打扰蛇。


话虽如此,为您的 Python 项目使用 Python 虚拟环境,您无需清理或返回到干净状态的 Ubuntu 系统 Python。

Python 虚拟环境为您的 Python 项目创建了一个隔离的环境。这意味着每个项目都可以有自己的依赖项,而不管 Ubuntu 系统或其他 Python 项目有什么依赖项。

可以像这样为 Python3 安装该功能:

sudo apt install python3-venv

要为项目创建 Python3 虚拟环境,首先需要创建一个目录,然后执行cd以下操作:

mkdir my_env && cd my_env

然后,在目录内创建一个新的 Python3 虚拟环境,如下所示:

python3 -m venv env

这将创建如下结构:

$tree -L 3

.
└── env
    ├── bin
    │   ├── activate
    │   ├── activate.csh
    │   ├── activate.fish
    │   ├── Activate.ps1
    │   ├── easy_install
    │   ├── easy_install-3.8
    │   ├── pip
    │   ├── pip3
    │   ├── pip3.8
    │   ├── python -> python3
    │   └── python3 -> /usr/bin/python3
    ├── include
    ├── lib
    │   └── python3.8
    ├── lib64 -> lib
    ├── pyvenv.cfg
    └── share
        └── python-wheels

要使用此环境,请按如下方式激活它:

source env/bin/activate

你的 shell 提示符将会(env)像这样显示:

(env) $

在此期间,Python3 命令、模块安装或修改将本地包含在此虚拟环境中。

完成后,像这样停用此 Python3 虚拟环境:

deactivate

你现在回到系统范围的 Python3,并且命令将在全球范围内生效,因此当心

答案2

以下是一种方法:

获取“apt-cache”以递归方式显示核心 python 库的反向依赖关系;“--installed”限制为已安装的软件包,“-i”仅显示重要的依赖关系(即不建议或推荐)。

'grep' 会过滤掉除包名称之外的所有内容,然后进行唯一排序(会有很多重复),然后使用 'xargs' 将结果行列表作为参数附加到 'apt-mark auto',将它们标记为自动安装。

当没有其他软件包依赖于“自动安装”的软件包时,这些软件包将被“apt autoremove”删除。

apt-cache --installed  -i --recurse rdepends \
  libpython3.8-minimal | \
    grep "^  " | sort -u | \
      xargs apt-mark auto

apt autoremove

这将显示要删除的软件包的长列表,请小心删除您想要保留的软件包的意外依赖关系!

对该提示说‘否’,并对所有需要保留的软件包使用‘apt-mark manual ThisOne’,然后再次运行‘apt autoremove’(并再次检查!)以清除垃圾。

答案3

我很高兴同意你的异端观点,即没有 Python 的系统上的生活比有 Python 的系统上的生活要好得多。问题不仅在于语言实现,还在于它的概念(它是一种具有超现实语法的基本脚本语言,但它用于复杂的 OO 项目)。最重要的问题是可用软件基础(包括库和最终产品)的质量非常低,甚至危及开源社区等。但这只是我的观点,其他人有不同的,有时是相反的观点。在这里,我仅向所有人解释如何从系统中清除 Python。

与普遍的看法相反,你可以从整个系统中清除 python- 幸运的是,它不是必需的软件包。一些工具和软件依赖于它,因此您可能需要它们。在这种情况下,需要保留一个最小的 Python(如果您运气好,至少不是 Python2)。其他软件包(如 Node.js)毫无理由地依赖于它,也应该清除它们(或者,一个不依赖于它们的理智的重新打包项目会很有用,希望有人会这样做)。

包依赖关系是一个 DAG:所有包都有一个它所依赖的包列表,这些包又依赖于其他包,依此类推。

你需要:映射这些依赖关系并找到它们的根源。为此,您有三个最重要的命令:

  • dpkg -s <package>显示哪些软件包依赖于<package>(如果它安装在您的系统上)。apt-cache show <package>对您的 apt 缓存中的软件包(可在您注册的 apt 存储库中安装的软件包)执行相同操作。
  • apt-cache rdepends <package>显示哪些包依赖于<package>
  • dpkg -S /usr/bin/python3.6显示哪个包有/usr/bin/python3.6。注意,/usr/bin/python通常是指向某个位置的符号链接/etc/alternatives,其中有一个指向真实包二进制文件的符号链接,这些不是包的注册文件列表的一部分(可在中找到/var/lib/dpkg/info/*.list)。因此,您可能需要使用命令将符号链接映射到其真实版本ls -l,然后使用dpkg -S它来查找包。

使用这些,您可以找到所有 python 包所依赖的包。对于 python,它是libpython2.7-minimal、 或libpython3.6-minimal。您可以通过 列出它们dpkg -l|grep libpython.*minimal

然后,系统apt --purge remove libpython2.7-minimal会将 python 从您的系统中彻底清除(删除,不留任何痕迹)。它还会为您列出要删除的具体软件包,如果您确实需要某些软件包,但很遗憾,您需要保留 python。

如果您想清除其他大型软件发行版(如服务器和类似系统中的 X11),也可以使用相同的方法。

相关内容