Isso pode ser feito usando a API apt do Python. Os pacotes que você vê em apt-mark showmanual
são exatamente aqueles em apt.cache.Cache()
para os quais is_installed
é verdadeiro e is_auto_installed
é falso. Mas é mais fácil processar as dependências:
#! /usr/bin/env python3
from apt import cache
manual = set(pkg for pkg in cache.Cache() if pkg.is_installed and not pkg.is_auto_installed)
depends = set(dep_pkg.name for pkg in manual for dep in pkg.installed.get_dependencies('PreDepends', 'Depends', 'Recommends') for dep_pkg in dep)
print('\n'.join(pkg.name for pkg in manual if pkg.name not in depends))
Até mesmo isso lista alguns pacotes que eu não esperaria ver lá ( init
, grep
?!).