如何将Python应用程序及其依赖项打包成Windows安装程序以进行分发?

61

我需要将我的Python应用程序、其依赖项和Python本身打包成一个单独的MSI安装程序,以便分发给用户。最终结果应该是:

  • Python被安装在标准位置
  • 软件包及其依赖项被安装在单独的目录中(可能是site-packages)
  • 安装目录应包含未压缩的Python,不需要独立的可执行文件

https://dev59.com/zHVD5IYBdhLWcg3wXaYd - nbro
7个回答

31

4
不算是完全重复。这与打包有关。那个人还不明白。但谢谢提供有关py2exe的信息。 - d-_-b
制作一个单独的可执行文件(而不是安装程序)并不是唯一的选择,甚至也不是最好的选择。所以绝对不是重复的。 - ivan_pozdeev

18

我使用 PyInstaller(svn版本)创建了一个独立的程序版本,其中包括Python和所有依赖项。需要一些调试才能使其正确运行并包含所有内容(py2exe和其他类似的程序也是如此,请参见这个问题),但之后它的表现非常好。

接下来您需要创建一个安装程序。NSIS非常适合此操作,而且还是免费的,但它只创建.exe文件而不是.msi文件。如果没有必要使用.msi文件,我强烈建议使用它。否则,请查看这个问题的答案以获得其他选项。


6

我的公司使用免费的InnoSetup工具。它是一个相对复杂的程序,可以为Windows构建安装程序并提供大量灵活性。我认为它创建的是.exe文件而不是.msi文件。虽然InnoSetup不是专门针对Python的,但我们已经为其中一个产品创建了一个安装程序,在安装时安装Python及其依赖项,并将其安装到用户指定的位置。


这与捆绑Python依赖项和代码无关。它仍然是一个巨大的混乱,最好安装Python和pip并通过pypi分发。 - demberto

4
我发现使用PyInstaller来处理依赖和自定义文件夹结构会获得更好的结果,它可以让你找到并指定像numpy和scipy这样的大型依赖项的隐藏导入和挂钩。但是,这也是个麻烦事。

1
八年后,PyInstaller仍然是一个很好的选择,但仍然是一个巨大的烦恼。 - Aaron Ciuffo

3

py2exe 可以将 Python 打包成 Windows 可执行文件。


2

好的,我以前使用过py2exe,它完美地工作,除了一件事... 它只能在可执行的Windows机器上运行。然后我了解到Jython可以将Python脚本转换为.Jar文件。正如您所知,任何安装了Java(“最新运行版本”)的机器都可以执行它。这很棒,因为Unix、Windows和iOS(大多数情况下)都运行Java。这意味着它可以在以下所有机器上运行。只要它们运行Java即可。不需要“py2mac + py2exe + freeze”才能在所有操作系统上运行。只需要Jython。

有关其工作原理以及如何使用它的更多信息,请单击此处。
http://www.jython.org/

请注意jython仅支持Python 2(截至撰写本文时)。


请在您的解决方案中提供更多见解。解释术语,必要时附加外部链接。 - Piotr Dajlido
抱歉,这是一个简单的表单,类似于将您的Python项目转换为可执行的JAR文件的py2exe。只需快速搜索GoogleJjython,就可以轻松完成。 - Python and Android for life

1

py2exe是实现这一目标的最佳方式。虽然使用起来有点麻烦,但最终结果非常好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接