我使用的是 Linux Mint,默认情况下有 PHP 8.1,但我需要安装 PHP 8.3。
我使用 apt-get remove php 删除了现有的 PHP 8.1。
但是,当我运行 php 命令时,我仍然看到 PHP 8.1。
如果 php 确实被删除了,我难道不应该收到“未找到命令”的消息吗?
我使用的是 Linux Mint,默认情况下有 PHP 8.1,但我需要安装 PHP 8.3。
我使用 apt-get remove php 删除了现有的 PHP 8.1。
但是,当我运行 php 命令时,我仍然看到 PHP 8.1。
如果 php 确实被删除了,我难道不应该收到“未找到命令”的消息吗?
回答实际问题:
php
您的系统上很可能有一个元包(它肯定是 Ubuntu 上的元包 - 并且它也很可能是 Linux Mint 上的元包)。元包基本上只包含/安装依赖项。这在某种程度上意味着元包引入的“实际”包“隐藏”在元包的通用名称(在本例中为
php
)后面。如果我检查
php
Ubuntu 上的 依赖项,我会发现sudo apt install php
实际上安装了php8.3
,因为它php
依赖于php8.3
:相反(这就是为什么
sudo apt remove php
不删除 PHP)sudo apt-remove php
只会删除php
元包,而保留php8.3
已安装的内容:要删除 PHP 8.3,我应该运行
sudo apt-remove php8.3
:正确的?
错了!As
php8.3
也是一个依赖于 的元包,而才是真正提供可执行文件的包。php8.3-cli
php
我想你已经明白我的意思了。
依赖链中的每个元包都会创建一个间接级别,并且使其更难获得“真正的交易”;在这种情况下,
php8.3-cli
将是链中的最后一个(删除它至少会使php -v
命令行失败),但是删除php8.3-cli
可能仍会留下一些安装的软件包sudo apt install php
。总的来说,
sudo apt remove php8.3-cli
接下来可能sudo apt autoremove
会摆脱所有东西(当然假设没有其他东西依赖于剩下的包)。互联网上的一些答案建议运行诸如之类的命令
sudo apt remove 'php8.3*'
,是的,这实际上将删除至少大部分sudo apt install php
已安装的内容。然而,我开始不喜欢这种方法,因为你需要非常小心地检查在删除过程中要删除哪些包(任何依赖于与 glob 匹配的包的包都将被卸载),而且由于现在存储通常不是问题,我通常会谨慎行事,不去管它。
相反,如果您的安装中没有 PHP 8.3,我只会使用您回答中描述的 PPA 并安装 PHP 8.3 和 PHP 8.1。安装过程将管理替代方案,一切都将正常工作(大多数情况下 - 开箱即用的最明显的例子是 PHP 与 Apache - 如果您将 PHP 与 Apache 一起使用,则需要重新配置 Apache 以加载新版本的
mod_php
viaa2enmod
/a2dismod
,否则仍将加载模块的旧版本)。apt update and apt upgrade
按照https://medium.com/@nothanjack/how-to-run-php-8-3-on-linux-mint-21-a-comprehensive-tutorial-23df8b03e620运行,将我的 PHP 设置为 8.3: