However, when I type sudo apt upgrade, I get this:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Huh? 0 not upgraded?
When I type sudo apt update again, I can still see there's the same package left to upgrade. How can I do it?
Apt upgrade, apt dist-upgrade and apt full-upgrade are all different.
Full-upgrade will upgrade a package even if it must delete or remove the existing package to do it.
Dist-upgrade will only upgrade the packages that do not require deleting or removing the old to do so.
If it appears when you run the command, it will upgrade.
It will if the upgrade command used is more generic. Using the dist- or full- commands removes that, causing it ensure compliance or even to check in some cases.
If you have packages marked for hold- they will show in the Up-gradable list, but not upgrade due to the hold on those packages.
Use apt-mark showhold to check if you have any held packages.