繁体   English   中英

如何分发 python 程序?

[英]How can I distribute python programs?

我的应用程序如下所示:

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?

我强烈推荐Pyinstaller ,它无缝地支持所有主要平台。 与 py2exe 和 py2app 一样,它在 Windows 上生成一个标准的可执行文件,在 OS X 上生成一个应用程序包,但它的好处是还可以很好地自动解析常见的依赖项,并且无需额外的配置调整就可以包含它们。

另请注意,如果您要将 Python 2.6 部署到 Windows,则应将此补丁应用于 Pyinstaller 主干。

您表示您不需要安装程序,但Inno Setup是 Windows 平台的易于使用和快速设置的选择。

分发 Python 应用程序的正常方式是使用distutils 它既用于分发库类型的 python 模块,也用于 python 应用程序,尽管我不知道它在 Windows 上是如何工作的。 无论如何,如果您使用 distutils,您将必须在 Windows 上单独安装 Python。

我可能会建议您使用适用于 Linux 的 disutils 和适用于 Windows 的 Py2exe 或类似的东西分发它。 对于 OS XI 不知道。 如果它是最终用户应用程序,您可能需要磁盘映像类型的东西,我不知道该怎么做。 但是请阅读这篇文章以了解有关它的用户体验的更多信息。 对于为程序员制作的应用程序,您可能也可以在 OS X 上安装 distutils 类型。

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

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

当我阅读python 的包装概述时,我偶然发现了它。 他们在那里张贴了这张漂亮的照片: 在此处输入图片说明

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

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

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

我可能弄错了,但 IronPython 没有内置的 Windows 编译器吗?

http://www.ironpython.net

[编辑]

试试 Cx_Freeze,迄今为止我用过的最好的 .py 到 .exe(加上一些 .dll)编译器。

http://cx-freeze.sourceforge.net/

如果您在 Windows 上分发,请使用安装程序安装所有需要的相关文件/interpeter。 分发一个 setup.exe。 这是windows上最好的方法。 否则用户会抱怨。

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

  • Miniconda-Install - 自动下载 Miniconda 并为应用程序创建隔离的 conda 环境的 powershell/bash 脚本。 支持 pip 但似乎没有维护并且有 https 下载问题。
  • Anaconda 项目和 Continuum 的(conda) 构造函数 两者都使用 conda。 (conda) 构造函数似乎能够在 Windows 上创建自包含安装程序甚至 NSIS 安装程序,但不支持 pip。 似乎表现得像 Anaconda/Miniconda 安装程序。
  • PyAppShare - 最终用户首先安装 Miniconda/Anaconda(就像运行时环境)。 然后单个安装批处理/bash 脚本从 yaml 规范创建隔离的 conda 环境。 该应用程序也是一个安装到环境中的 conda/pip 包本身,并创建了一个可执行入口点。 自动创建跨平台桌面和程序快捷方式。 他们激活环境并启动应用程序。 支持点子。

* 对开发者最方便。 对最终用户来说足够方便。

对于 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 页长。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM