如何从安装程序中提取 Python 3.5+?

如何从安装程序中提取 Python 3.5+?

在版本中降低3.5.0 版有一个.MSI适用于 Windows 的安装程序,它有一个非常好的隐藏选项。该选项如下所示:

msiexec.exe /a "file.msi" /qb /L*V "file.log" ALLUSERS=0 TARGETDIR="target" CURRENTDIRECTORY="%~dp0" <additional options>

这基本上允许我忽略管理员权限,因为 MSI 转向某种针对整个网络的安装程序,因此需要权限解决方法。

Python 3.5.0 引入了一个新的.EXE安装程序,它.MSI本身就包含文件,你可以使用以下命令获取它们:

python-3.5.0.exe /layout [optional target directory]

但是这个解决方案确实存在一个令人讨厌的问题。当我这样做时,文件.MSI有一个-d.msi后缀,当我使用上面的命令手动解压它时msiexec每个文件也有这个后缀,这使得它成为彻底损坏安装。重命名文件实际上不是一个选项,因为每个文件都有-d.<file ext>,而不是-d.msi.<file ext>后缀,所以很难用批处理等工具简单地重命名它,除非我想检查多种情况(例如文件夹)。

有没有办法将安装程序的内容提取到单独的文件夹中,就像以前一样没有是否放入了任何其他东西Programs and features,例如Python 3.5.0 (64bit)或类似的东西?

或者其他问题 - 有什么方法可以禁止安装程序访问Programs and features,完全阻止它询问管理员权限和注册表?

如果我想安装多个 python,而又不绑定任何东西,主要目的是测试,那么这个工具就非常有用。请注意,我无意使用 python launcher(那个py.exe东西)、virtualenv 或任何其他替代“解决方案”,因为它们每个都只允许我安装一个单身的相同版本的 Python 安装和/或太大,无法快速使用。

答案1

子文件夹现在包含所有.msi文件: https://www.python.org/ftp/python/3.8.0/amd64/

答案2

显然,从 3.5 版开始的 Python 安装程序都有我需要的 MSI嵌入并且它们不会出来。但是每个 Python 都有 Web 安装程序,您可以使用它做同样的事情并获得一个有效的 Python 安装:

python-3.5.0-webinstall.exe /layout <folder>

这将下载ReleaseMSI 文件(不是DebugPDB仅是)。然后,您需要过滤具有_d.msi_pdb.msi后缀的文件,这现在对于 Batch 来说很简单,最终您将得到以下结构:

core.msi
dev.msi
doc.msi
exe.msi
launcher.msi
lib.msi
path.msi
pip.msi
python-3.6.0-webinstall.exe
tcltk.msi
test.msi
tools.msi

以及相当多的 VS 可再发行组件。根据您的需要,您可能需要删除工作目录中的.exe.msu(redists)、_d.msi_pdb.msi文件。其余的是Release扩展解释器功能的文件,例如 launcher( py.exe)、path(可能只是将 python 永久放入PATH)等。

如果你用下面的命令运行每一个:

msiexec.exe /a <file> targetdir=<folder>

你得到了一个可以工作的便携式 Python 安装。注意这样的事情是未得到官方支持

答案3

正如所提到的先前链接的错误报告, 这nuget 包更适合手动解压 - 它们实际上是 zip 文件。

Python 3.8.1 nuget 包含一个tools子文件夹,其中包含实际的 Python 安装(具有正常的、、python.exe等);该文件夹之外的内容是元数据。pythonw.exeLib/include/

相关内容