关于发布:我如何发布python程序?

How can I distribute python programs?

我的应用程序如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
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*文件就好了。没有真正的理由,我只是不喜欢有不必要的文件。
  • 小精灵

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

    • 对于Windows?(这是我目前唯一需要支撑的平台。)
    • 对于Mac?
    • 对于Linux?
    • 小精灵


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

      还要注意,如果您要将python 2.6部署到Windows,那么应该将此补丁应用到pyinstaller主干。

      您表示不需要安装程序,但Inno安装程序是Windows平台的一个易于使用和快速安装选项。


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

      我可能会建议您在Linux和Py2Exe或类似的Windows环境中使用双功能软件来分发它。对于OS X,我不知道。如果它是一个最终用户应用程序,你可能想要一个磁盘映像类型的东西,我不知道该怎么做。但是阅读本文了解更多关于它的用户体验的信息。对于为程序员开发的应用程序,您可能也可以在OS X上安装distutils类型。


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

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


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

      网址:http://www.ironpython.net

      [编辑]

      尝试一下cx-freeze,它是迄今为止我使用过的最好的.py-to.exe(加上一些.dlls)编译器。

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


      我认为这也值得一提皮克斯(考虑到更多的关注这个问题,而不是问题本身)。根据其自身描述:

      PEX files are self-contained executable Python virtual environments. More specifically, they are carefully constructed zip files with a #!/usr/bin/env python and special __main__.py that allows you to interact with the PEX runtime. For more information about zip applications, see PEP 441.

      当我阅读关于Python打包的概述时,我偶然发现了它。他们把这张漂亮的照片贴在那里:enter image description here

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


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


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

      • miniconda安装-自动下载miniconda并为应用程序创建独立的conda环境的PowerShell/bash脚本。支持PIP,但似乎没有维护,并且存在HTTPS下载问题。
      • Continuum的Anaconda项目和(Conda)构造函数。两者都使用康达。(conda)构造函数似乎能够在Windows上创建独立的安装程序,甚至NSI安装程序,但不支持PIP。看起来像Python/小Python安装工。
      • pyappshare-最终用户首先安装miniconda/anaconda(类似于运行时环境)。然后,单个install batch/bash脚本根据yaml规范创建独立的conda环境。该应用程序本身也是一个conda/pip包,安装到环境中,并创建一个可执行的入口点。自动创建跨平台桌面和程序快捷方式。它们激活环境并启动应用程序。支持PIP。
      • 小精灵

        *对开发人员来说最方便。为最终用户提供了足够的便利。