Pip è modulo appena python, quindi basta importarlo e chiamare list
:
import pip
pip.main(['list'])
# you can get details on package using show:
pip.main(['show', 'wheel'])
Ok quindi non c'è modo migliore:
pip.utils.get_installed_distributions()
si ritorna lista dei pacchetti installati.
packages = pip.utils.get_installed_distributions()
p = packages[0]
p.project_name
p.version
p.egg_name
p.location
Si può vedere che cosa sta facendo pip list
dal codice sorgente here
anche get_installed_distributions
accettare tutta una serie di parametri per restituire solo i pacchetti locali (da virtualenv corrente), ecc Si prega di consultare la Guida here.
C'è anche Sottostante comando basso livello dal modulo _vendor
:
[p for p in pip._vendor.pkg_resources.working_set]
Tuttavia get_installed_distributions
forniscono più semplice api.
Se una lib era internamente facendo così usando il sottoprocesso sarebbe un problema? – Cripto
Andrebbe bene, a patto che il mio codice non fosse tenuto a conoscere la complessità di invocare il sottoprocesso su vari sistemi con cui non ho familiarità. –
OP. Ho scritto quella domanda prima di vedere la risposta di @vittore. Mi piace quella risposta. – Cripto