我该如何发布python程序?

Geo*_*lly 94 python distribution

我的应用程序如下所示:

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平台上并不常见.

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

  • 该图标是默认的python图标.
  • 我必须手动创建别名.
  • 在我的源目录中有很多其他文件,如源代码控制文件夹.
  • 我不得不重新命名main.py,以main.pyw手动.
  • 如果只有`.pyo*文件在目标机器上,那就太好了.这没有真正的原因,我只是不喜欢有不必要的文件.

如何创建一个很好的自动化发行版?

  • 对于Windows?(这是我目前唯一需要支持的平台.)
  • 对于mac?
  • 对于Linux?

Dan*_*aab 60

我强烈推荐Pyinstaller,它可以无缝地支持所有主要平台.与py2exe和py2app一样,它在Windows上生成标准可执行文件,在OS X上生成应用程序包,但其优点还在于自动解决常见依赖关系,并且无需额外配置调整即可完成.

另请注意,如果要将Python 2.6部署到Windows,则应将此修补程序应用于Pyinstaller trunk.

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

  • 我不确定它是否有点过分.将应用程序与Pyinstaller捆绑在一起实际上比其他方法更容易,特别是那些依赖于c扩展的方法......在大多数情况下,就像一行命令行调用一样简单.安装Python +依赖项+应用程序本身(无论是通过distutils等,还是只是一个zip文件)更为复杂,特别是如果开发人员无法自己手动配置目标计算机并需要向客户端提供指令.至少在Windows上,我认为这种分配方式很有意义. (3认同)
  • 正是我正在寻找的东西。有时我需要让我的脚本在我无法安装任何东西的计算机上运行。我需要的是没有外部依赖项的单个可执行文件。我可以腾出几秒钟的时间来启动。谢谢你! (2认同)

Len*_*bro 34

分发Python应用程序的常规方法是使用distutils.它既用于分发库类型python模块,也用于python应用程序,虽然我不知道它在Windows上是如何工作的.如果使用distutils,在Windows上你必须单独安装Python.

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

  • @gs:在.dmg中运送Mac应用程序实际上非常普遍..dmg是磁盘映像,而不是应用程序的格式(即.app).因此,您经常在.dmg中找到一个.app,以及一些README文件. (5认同)
  • @gs我不知道为什么你想让distutils只创建一个目录dist并将文件复制到那里,你可以自己做.Distutils做了很多事情,包括制作Windows安装程序,而Python 2.6也在开始菜单中创建了链接.它需要你单独安装Python,所以对于最终用户应用程序,我认为py2exe是一个更好的解决方案,*因为*它包含它自己的Python.Alexander Limi在他的bloggpost中详细讨论了OS X的运输/安装程序,所以我顺从了他. (2认同)

use*_*669 8

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

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

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

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


Eri*_*got 5

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

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