如何分发 python 程序?

我的应用程序是这样的:

main.py
windows/
__init__.py
mainwindow.py
...
model/
__init__.py
orders.py
...
resources/
image1.png
logo.jpg
...

程序以 main.py 启动。有没有一个好的方法来创建一个“最终”应用程序?我考虑的是类似 py2exe/py2app 的应用程序,但是不需要将 python 解释器/模块复制到只有一个可执行文件的应用程序中。

我查看了 distutils,但它看起来像是在 Python 目录中安装了一个程序,这在非 Linux 平台上并不常见。

目前,我只是将整个源文件夹复制到目标机器上,并在 Windows 上创建一个 main.pyw别名。一些不便之处:

  • 该图标是默认的 Python 图标。
  • 我必须手动创建化名。
  • 在我的源目录中有许多其他文件,比如源代码管理文件夹。
  • 我必须手动将 main.py重命名为 main.pyw
  • 如果你能。Pyo * 文件在目标机器上。没有真正的原因,我只是不喜欢有不必要的文件。

如何创建一个良好的自动分发?

  • (这是我目前唯一需要支持的平台。)
  • 为了 Mac?
  • 为了 linux?
93996 次浏览

分发 Python 应用程序的一般方法是使用 蒸馏酒。它既适用于分发库类型的 python 模块,也适用于 python 应用程序,尽管我不知道它在 Windows 上是如何工作的。无论如何,如果使用 distutils,在 Windows 上必须单独安装 Python。

我可能建议您使用针对 Linux 的 disutils 和针对 Windows 的 Py2exe 或类似的东西来发布它。对于 OS X 我不知道。如果它是一个终端用户应用程序,你可能想要一个磁盘映像类型的东西,我不知道如何做到这一点。但是阅读 这篇文章获得更多关于它的用户体验的信息。对于一个为程序员制作的应用程序来说,你也可以在 OS X 上安装 distutils 类型。

If you are distributing on windows, use an 安装程序 to install all the relevant files/interpeter whatever is needed. Distribute a setup.exe. That is the best way on windows. Otherwise users will complain.

我强烈推荐 安装工,它可以无缝地支持所有主要平台。与 py2exe 和 py2app 一样,它在 Windows 上生成了一个标准的可执行文件,在 OS X 上生成了一个应用包,但是它的好处在于它能够很好地自动解析常见的依赖关系,并且在不进行额外配置调整的情况下包含这些依赖关系。

还要注意,如果要将 Python 2.6部署到 Windows,应该将 this patch应用于 Pyinstaller 主干。

您指出您不需要安装程序,但是 Inno Setup是一个易于使用和快速安装的 Windows 平台选择。

Fredrik Lundh 的 squeeze.py可以创建一个不包含 Python 解释器而包含字节码的文件。使用正确的参数,您可以在结果文件中包含其他文件、模块等。我在一个项目中成功地使用了它。最终的程序可以在 OS X、 Linux 和 Windows 上运行,没有任何问题!

PS : 每台机器都需要一个 Python 解释器,该解释器可以兼容挤压.py 生成的字节码。如果需要的话,您可以为不同版本的 Python 生成不同的字节码版本(只需使用正确的 Python 版本运行 squewze.py)。

我认为 铁蟒有一个内置的窗口编译器:

我尝试了 不许动,认为它是目前为止最好的。没问题。(加上一些。编译器。

分发 python 桌面应用程序最方便的跨平台方式是依赖跨平台 conda 包管理器。有几种工具可以使用它:

  • Miniconda-安装 -powershell/bash 脚本,自动下载 Miniconda 并为应用程序创建独立的 conda 环境。支持 pip,但似乎没有维护,并且存在 https 下载问题。
  • Anaconda 项目 (conda)构造函数。都用 Conda。(conda)构造函数似乎能够创建自包含的安装程序,甚至在 Windows 上的 NSIS 安装程序,但不支持 pip。看起来像是阿纳康达/Miniconda 的安装工。
  • PyAppShare -最终用户首先安装 Miniconda/Anaconda (像执行期函式库一样)。然后,单个安装批处理/bash 脚本从 yaml spec 创建独立的 conda 环境。应用程序本身也是一个 conda/pip 包,它被安装到环境中,并且创建了一个可执行的入口点。自动创建跨平台桌面和程序快捷方式。它们激活环境并启动应用程序。支持 Pip。

* The most convenient for the developer. Enough convenient for the end-user.

我认为值得一提的是 PEX(更多地考虑这个问题受到的关注,而不是这个问题本身)。根据它的 自己的描述:

PEX 文件是自包含的可执行 Python 虚拟环境。更具体地说,它们是使用 #!/usr/bin/env python和特殊的 __main__.py精心构造的 zip 文件,#!/usr/bin/env python和特殊的 __main__.py允许您与 PEX 运行时交互。有关 zip 应用程序的更多信息,请参见 PEP 441

我在读 Python 包装概述的时候偶然发现了它,他们在那里贴了一张漂亮的图片: enter image description here

总结一下: 如果您可以依赖目标机器上安装的 python,那么使用 PEX 生成一个自包含的“可执行文件”,它的文件大小可能比 PyInstaller 生成的可执行文件小,例如。

对于 Windows,我发现 py2exe 非常容易使用。

pip install distutils
pip install py2exe

只需要在 setup.py 中编写几行代码:

from distutils.core import setup
import py2exe


setup(console=['hello.py'])

Py2exe 构建一个可执行文件并包含所有依赖项。在构建 exe 之前,您可能需要手动添加 C + + 运行时:

from glob import glob
data_files = [("Microsoft.VC90.CRT", glob(r'C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\*.*'))]
setup(
data_files=data_files,
...
)

Https://py2exe.org 有一个漂亮而简单的教程,大约有3页长。