[英]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
创建一个别名。 一些不便:
main.py
重命名为main.pyw
。如何创建一个好的自动化分发?
我强烈推荐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 编译器吗?
[编辑]
试试 Cx_Freeze,迄今为止我用过的最好的 .py 到 .exe(加上一些 .dll)编译器。
如果您在 Windows 上分发,请使用安装程序安装所有需要的相关文件/interpeter。 分发一个 setup.exe。 这是windows上最好的方法。 否则用户会抱怨。
分发 python 桌面应用程序最方便*的跨平台方式是依赖跨平台 conda 包管理器。 有几种使用它的工具:
* 对开发者最方便。 对最终用户来说足够方便。
对于 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.