我想编写一个脚本来清理机器上所有现有版本的Python,以及一个单独的脚本,用于在标准化位置重新安装版本2.7和3.5。我目前正在尝试使用PowerShell 5.1.14393.187中的Package Management cmdlet执行此操作。
对于清理脚本,我开始使用PowerShell的包命令:
Get-Package "*python*" | Uninstall-Package
当从管理控制台运行时,似乎工作得很好,但是在进一步调查时会留下一些包...
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
为什么在卸载程序包之后这些程序包仍然存在?有没有最佳实践方法呢?是否有最佳实践方法来编写Python的重新安装脚本,这样就不会再发生了?
更新
通过使用控制面板GUI首先修复然后卸载Python 3安装,我在清理大部分内容方面取得了一些成功。我很惊讶没有Repair-Package
命令与Get-Package
一起使用。
一旦修复了Python 3的其他部分,就会有一个名为“Python Launcher”的MSI软件包,而{2.7} MSI软件包仍由Get-Package
报告,但GUI中没有任何内容。此时,“Python Launcher”上的Uninstall-Package
成功发出警告,表示需要重新启动。毫无疑问msi:Python 2.7.11 / 2.7.11150。
其他信息:
我认为Chocolatey v0.10.1可能对目前的情况做出了贡献。至少有一些机器可能已经使用公共存储库中的chocolaty安装了python。在上面的同一台机器上,我也试过了:
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
答案 0 :(得分:1)
要回答这个问题,我想强调几点,供你考虑。
为什么卸载程序包后这些程序包仍然存在?
这实际上取决于您用于安装软件包的内容以及Chocolatey是否能够捕获auto uninstaller的快照。
许多软件包不需要卸载脚本。有些人。当他们是MSI并在Chocolatey之外升级时(如Chrome自动执行),您需要Package Synchronizer或卸载脚本才能卸载该软件。
有最好的做法吗?
如果这是供组织使用,并且您对破损的容忍度较低,我们建议您构建自己的内部包。然后,您可以完全控制过程并具有可重复,可靠的过程。这就是数百家使用Chocolatey的组织目前如何增强其安装流程。他们通常已经在某些内部文件共享上已经存在软件安装程序并在其周围构建程序包,以利用更好的自动化过程(与他们可能使用的旧批处理文件相比,或者更糟糕的是,从中手动安装)。
如果您对自己构建自己的原因感到好奇,请参阅https://chocolatey.org/docs/community-packages-disclaimer(它会尝试突出显示公共存储库的问题,并且它受到分发权限,内部存储库不受此限制)。
是否有一种最佳实践方法来编写python的重新安装脚本,这样就不会再次发生了?
在Chocolatey提供程序中使用Puppet,Chef,Ansible或DSC等配置管理工具。 https://chocolatey.org/docs/features-infrastructure-automation
这是您在所有计算机上创建自动化并利用包管理的方法。