# Apt-get : ne pas obtenir d'erreur lors de l'installation d'un paquet déjà installé

**URL:** <https://www.debian-fr.org/t/apt-get-ne-pas-obtenir-derreur-lors-de-linstallation-dun-paquet-deja-installe/76146>\
**Category:** Programmation\
**Created:** [Mars 16, 2018, 9:21 UTC](https://www.debian-fr.org/t/apt-get-ne-pas-obtenir-derreur-lors-de-linstallation-dun-paquet-deja-installe/76146 "2018-03-16T09:21:38Z")\
**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:** [Mars 16, 2018, 9:21 UTC](https://www.debian-fr.org/t/apt-get-ne-pas-obtenir-derreur-lors-de-linstallation-dun-paquet-deja-installe/76146/1 "2018-03-16T09:21:38Z")

</div>

Bonjour,

J’utilise le programme `apt-get` pour installer des paquets dans un script en Python3. Voici la fonction que j’utilise :

```auto
apt_install_auto = ['/usr/bin/apt-get', 'install', '--assume-yes']
def special_install_package (packages, target_release = None, reinstall = False, debconf = None):
	'''
	Fais une installation tellement spéciale qu'elle n'est pas disponible via libapt
	Éviter l'utilisation de cette fonction pour une installation classique (sans aucune utilisation des options marquées d'un +)
	packages chaîne de caractère pour un paquet ou liste itérable pour une liste de paquets
	target_release + une chaîne de caractère définissant la distribution cible (voir l'option -t dans apt-get (8))
	reinstall défini si le paquet doit être réinstallé en cas de présence préalable de celui-ci
	Le paramètre debconf sert à passer une configuration debconf au besoin avant l'installation du paquet
	'''
	log ('', title = __name__ + '.special_install_package', level = 0)
	tl = ''
	to = []
	rl = ''
	ro = []
	
	# Je trouve cette méthode d'installation pas très top, je préfèrerai qu'on utilise la classique install () si l'installation n'a rien de spécial
	# Ajouter les éventuels nouveaux paramètres spéciaux ici
	if target_release is None:
		log ('!!! ATTENTION !!!\nInstallation de paquets non spéciale (cette fonction n\'a pas ce but) !\n!!! ATTENTION !!!\nLes paquets seront tout de même installés, mais merci de le faire à l\'aide de la fonction pas spéciale', title = __name__ + '.special_install_package', level = 1)
	
	if type (debconf) == str:
		set_debconf (debconf)
	
	if type (packages) == str:
		packages = (packages,)
		
	if type (target_release):
		tl = ' à partir de la distribution ' + target_release
		to = ['--target-release', target_release]
	
	if reinstall:
		rl = ' et réinstallation si paquet(s) déjà installé(s)'
		ro = ['--reinstall',]
	
	log ('Installation spéciale des paquets ' + str (packages) + tl + rl + '…', title = __name__ + '.special_install_package', level = 0)
	
	cmd = apt_install_auto + ro + to + list (packages)
	if call (cmd):
		log ('Installation spéciale exécutée', title = __name__ + '.special_install_package', level = 0)
		return (True)
	else:
		log ('Installation spéciale terminée avec une erreur', title = __name__ + '.special_install_package', level = 2)
		return (False)

```

Pour ceux qui ne sont pas familier de python, je lance une commande `/usr/bin/apt-get install --assume-yes <paquets>`. Le problème, c’est que quand je lance ça avec un paquet qui est déjà installé, le programme `apt-get` retourne une erreur et la fonction se termine donc avec une erreur alors que tout s’est bien passé.  
Existe-t-il une option pour ne pas avoir d’erreur dans ce cas ?

---

<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:** [Mars 16, 2018, 10:42 UTC](https://www.debian-fr.org/t/apt-get-ne-pas-obtenir-derreur-lors-de-linstallation-dun-paquet-deja-installe/76146/2 "2018-03-16T10:42:39Z")

</div>

Ah, trouvé, le problème venait de la partie suivante :

```auto
	if call (cmd):
		log ('Installation spéciale exécutée', title = __name__ + '.special_install_package', level = 0)
		return (True)
	else:
		log ('Installation spéciale terminée avec une erreur', title = __name__ + '.special_install_package', level = 2)
		return (False)

```

Dans ce cas, la condition dans `if call (cmd)` n’est pas vérifiée, j’ai donc remplacé par `if call (cmd) == 0` et ça fonctionne.
