# Python3 : libapt

**URL:** <https://www.debian-fr.org/t/python3-libapt/72699>\
**Category:** Programmation\
**Created:** [Février 15, 2017, 3:47 UTC](https://www.debian-fr.org/t/python3-libapt/72699 "2017-02-15T15:47:47Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Almtesh](https://www.debian-fr.org/user_avatar/www.debian-fr.org/almtesh/32/10312_2.png) [@Almtesh](https://www.debian-fr.org/u/Almtesh)\
**Post date:** [Février 15, 2017, 3:47 UTC](https://www.debian-fr.org/t/python3-libapt/72699/1 "2017-02-15T15:47:59Z")

</div>

Salut,

Je souhaiterai pouvoir passer des commandes apt via Python3 au sein d’un script.  
Je pourrais faire passer ça avec un `os.system ('apt <arguments>')`, mais je veux récupérer les erreurs avec un style plus Python.  
Le problème, c’est que Python3 s’installe avec apt et que son installation peut poser des problèmes, du coup, impossible de trouver quoique ce soit.

Je cherche juste à faire des opérations de base (installer un paquet, purge un paquet, vérifier l’état d’un paquet).  
J’ai déjà trouvé comment mettre à jour la base et upgrader les paquets, mais au cas où, si je me suis trompé, je colle le code que j’ai produit jusqu’alors.

```auto
from apt import Cache

def update ():
	'''
	Updates the database
	Returns False if problem happens
	'''
	c = Cache ()
	return (c.update ())

def upgrade ():
	'''
	Upgrades the packages needed to be upgraded
	You **need** to run the update () function before that
	Returns False if problem happens
	'''
	c = Cache ()
	c.upgrade (dist_upgrade = True)
	return (c.commit ())

```

Merci.

---

<div class="post-metadata">

**Author:** ![Almtesh](https://www.debian-fr.org/user_avatar/www.debian-fr.org/almtesh/32/10312_2.png) [@Almtesh](https://www.debian-fr.org/u/Almtesh)\
**Post date:** [Février 16, 2017, 10:07 UTC](https://www.debian-fr.org/t/python3-libapt/72699/2 "2017-02-16T10:07:48Z")

</div>

J’ai trouvé comment faire, en fait, la classe apt.Cache est un dictionnaire des paquets.  
Du coup, à titre d’information, voici le reste de mon code pour des opérations basiques.

```auto
from apt import Cache

def update ():
	'''
	Updates the database
	Returns False if problem happens
	'''
	c = Cache ()
	return (c.update ())

def upgrade (update_before = True):
	'''
	Upgrades the packages needed to be upgraded
	update_before defines if the update () function must be called before
	Its default value is True because it's highlly recommended, but you could have done it recently
	
	Returns False if problem happens
	'''
	if update_before:
		if not update ():
			return (False)
	c = Cache ()
	c.upgrade (dist_upgrade = True)
	return (c.commit ())

def installed (package):
	'''
	Returns True if package is installed
	'''
	c = Cache ()
	return (c [package].is_installed)

def install (package):
	'''
	Installs package
	Returns False if problem happens
	Returns True if the package is allready installed
	'''
	if not installed (package):
		c = Cache ()
		c [package].mark_install ()
		return (c.commit ())
	else:
		return (True)

def remove (package, purge = False):
	'''
	Removes package
	Returns False if problem happens
	Returns True if the package is allready installed
	'''
	if installed (package):
		c = Cache ()
		c [package].mark_delete (purge = purge)
		return (c.commit ())
	else:
		return (True)

```
