2016-09-26 1 views
1

Je veux écrire un script qui nettoie toutes les versions existantes de Python sur une machine, et un script séparé pour réinstaller les versions 2.7 et 3.5 dans des emplacements standardisés. J'essaie actuellement de faire cela en utilisant les cmdlets de gestion de paquets dans PowerShell 5.1.14393.187.Comment supprimer des installations Python avec PowerShell Package Management?

Pour le script de nettoyage, j'ai commencé avec les commandes de paquet de PowerShell:

Get-Package "*python*" | Uninstall-Package 

qui, lorsqu'il est exécuté à partir d'une console d'administration, semble fonctionner très bien, mais une enquête plus poussée laisse quelques paquets restants ...

PS C:\WINDOWS\system32> Get-Package "*python*" 

Name       Version   Source       ProviderName 
----       -------   ------       ------------ 
Python 3.5.1 (64-bit)   3.5.1150.0          Programs 
Python 3.5.1 pip Bootstrap ... 3.5.1150.0          msi 
Python 3.5.1 Tcl/Tk Support... 3.5.1150.0          msi 
Python 2.7.11     2.7.11150           msi 
Python 3.5.2 pip Bootstrap ... 3.5.2150.0          msi 
Python 3.5.2 (32-bit)   3.5.2150.0          Programs 

Pourquoi ces packages sont-ils toujours présents après Uninstall-Package? Existe-t-il un moyen pratique de le faire? Existe-t-il un moyen pratique de scripter la ré-installation de Python afin que cela ne se reproduise plus?

Mise à jour

J'ai eu un certain succès dans le nettoyage de la majorité de cela en utilisant l'interface graphique du panneau de commande pour la première réparation, puis désinstaller les installations Python 3. Je suis surpris qu'il n'y ait pas de commande Repair-Package pour aller avec Get-Package. Une fois les autres parties de Python 3 réparées, il y avait un paquet MSI appelé "Python Launcher", et le paquet Python 2.7 MSI restait signalé par Get-Package, mais rien dans l'interface graphique. À ce stade, Uninstall-Package sur le "Python Launcher" a réussi avec un avertissement indiquant qu'un redémarrage était requis. Pas de chance avec msi: Python 2.7.11/2.7.11150.


Informations complémentaires:

Je pense chocolaté v0.10.1 peut avoir contribué à la situation actuelle. Au moins certaines des machines peuvent avoir installé python en utilisant chocolaty du référentiel public. Sur la même machine ci-dessus, j'ai aussi essayé ceci:

PS C:\WINDOWS\system32> choco uninstall python 
Chocolatey v0.10.1 
Uninstalling the following packages: 
python 
python is not installed. Cannot uninstall a non-existent package. 

Chocolatey uninstalled 0/1 packages. 1 packages failed. 
See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log). 

Failures 
- python - python is not installed. Cannot uninstall a non-existent package. 

Did you know the proceeds of Pro (and some proceeds from other 
licensed editions) go into bettering the community infrastructure? 
Your support ensures an active community, it makes you look smarter, 
plus it nets you some awesome features! 
https://chocolatey.org/compare 
PS C:\WINDOWS\system32> choco uninstall python3 
Chocolatey v0.10.1 
Uninstalling the following packages: 
python3 

python3 v3.5.1 
Skipping auto uninstaller - No registry snapshot. 
python3 has been successfully uninstalled. 

Chocolatey uninstalled 1/1 packages. 0 packages failed. 
See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log). 

PS C:\WINDOWS\system32> choco uninstall python2 
Chocolatey v0.10.1 
Uninstalling the following packages: 
python2 

python2 v2.7.11 
Running auto uninstaller... 
Skipping auto uninstaller - The application appears to have been uninstalled already by other means. 
python2 has been successfully uninstalled. 

Chocolatey uninstalled 1/1 packages. 0 packages failed. 
See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log). 

PS C:\WINDOWS\system32> get-package "*python*" 

Name       Version   Source       ProviderName 
----       -------   ------       ------------ 
Python 3.5.1 (64-bit)   3.5.1150.0          Programs 
Python 3.5.1 pip Bootstrap ... 3.5.1150.0          msi 
Python 3.5.1 Tcl/Tk Support... 3.5.1150.0          msi 
Python 2.7.11     2.7.11150           msi 
Python 3.5.2 pip Bootstrap ... 3.5.2150.0          msi 

Répondre

1

Pour répondre à cette question que je vais mettre en évidence quelques points pour que vous considériez.

  1. Jusqu'à ce que le support technique ait été annoncé, n'utilisez pas le fournisseur PowerShell PackageManagement non officiel pour Chocolatey. Il s'agit d'un aperçu non pris en charge soumis à des bugs et à des failles de sécurité (il n'a pas non plus été créé par l'équipe de Chocolatey). Au lieu de cela, utilisez choco.exe ou un autre fournisseur officiel. AutoUninstaller est la ressource des clients officiels de Chocolatey qui peuvent supprimer les logiciels installés en mode natif des paquets qui ne contiennent pas de script de désinstallation. Il est important de noter que vous devez également installer à partir de ces clients officiels. Plus d'informations à https://chocolatey.org/docs/commands-uninstall

Pourquoi ces packages sont-ils toujours présents après le programme de désinstallation?

Cela dépend vraiment de ce que vous avez utilisé pour installer les paquets et si Chocolatey a pu capturer un instantané pour auto uninstaller.

De nombreux packages ne nécessitent pas de script de désinstallation. Certains le font.Quand ils sont MSI et sont mis à jour en dehors de Chocolatey (comme le fait automatiquement Chrome), vous avez besoin de Package Synchronizer ou d'un script de désinstallation pour désinstaller le logiciel.

Existe-t-il une meilleure façon de procéder? Si cela est fait pour un usage organisationnel et que vous avez une tolérance faible aux ruptures, nous vous recommandons de créer vos propres packages internes. Ensuite, vous pouvez contrôler complètement le processus et avoir un processus reproductible et fiable. C'est ainsi que des centaines d'organisations utilisant Chocolatey ont amélioré leurs processus d'installation. Ils ont généralement déjà des installateurs de logiciels déjà présents sur certains partages de fichiers internes et construisent des paquets autour d'eux pour tirer parti des meilleurs processus d'automatisation (par rapport aux anciens fichiers batch qu'ils utilisaient ou, pire encore, installaient manuellement). Si vous êtes curieux de savoir pourquoi vous devriez construire le vôtre, voyez https://chocolatey.org/docs/community-packages-disclaimer (il tente de mettre en évidence les problèmes avec un dépôt public et de le soumettre à des droits de distribution, ce à quoi un dépôt interne n'est pas soumis). Existe-t-il un moyen de script de ré-installation de python pour éviter que cela ne se reproduise?

Utilisez un outil de gestion de configuration tel que Puppet, Chef, Ansible ou DSC avec le fournisseur Chocolatey. https://chocolatey.org/docs/features-infrastructure-automation

C'est ainsi que vous créez l'automatisation sur toutes vos machines et que vous profitez de la gestion des paquets.

+0

Merci @ferventcoder. Puisque tous les paquets Python ont des programmes d'installation basés sur MSI, j'espérais que le nettoyage pourrait être réalisé en utilisant le fournisseur de paquets msi fourni par Microsoft. Les fournisseurs listés sont ** msi, msu, NuGet, PowerShellGet, ** et ** Programs **. Est-ce que l'un de ceux-ci est celui que vous ne mentionnez pas? –

+0

Seul le fournisseur PackageManagement actuel pour Chocolatey n'est pas pris en charge. Vous pouvez commencer par essayer de désinstaller le fournisseur msi. – ferventcoder

+0

OK, donc je pense que le fournisseur non pris en charge n'était pas impliqué. Y at-il des informations plus détaillées sur la façon dont ce programme de désinstallation automatique Chocolatey fonctionne quelque part? Utilise-t-il, par exemple, les mécanismes MSI si possible? –