我想从我的 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),也可以使用相同的方法。