我该如何分发 Python 程序?

2025-02-24 09:29:00
admin
原创
58
摘要:问题描述:我的应用程序如下所示:主程序 视窗/ __init__.py 主窗口 ... 模型/ __init__.py 订单.py ... 资源/ 图片1.png 徽标.jpg ... 该程序以 main.py 启动。有没有好的方法可以用...

问题描述:

我的应用程序如下所示:

主程序
视窗/
    __init__.py
    主窗口
    ...
模型/
    __init__.py
    订单.py
    ...
资源/
    图片1.png
    徽标.jpg
    ...

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

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

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

  • 该图标是默认的python图标。

  • 我必须手动创建别名。

  • 在我的源目录中,有很多附加文件,例如源代码控制文件夹。

  • 我必须手动重main.py命名main.pyw

  • 如果目标机器上只有 `.pyo* 文件就好了。这没什么特别的,我只是不喜欢有不必要的文件。

如何创建良好的自动分布?

  • 适用于 Windows?(这是目前我唯一需要支持的平台。)

  • 适用于 mac?

  • 适用于 Linux?


解决方案 1:

我强烈推荐Pyinstaller,它几乎无缝支持所有主要平台。与 py2exe 和 py2app 一样,它在 Windows 上生成标准可执行文件,在 OS X 上生成应用程序包,但它的优点还在于它能够出色地自动解析常见依赖项并将它们包含在内,而无需进行额外的配置调整。

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

您表示不需要安装程序,但Inno Setup是 Windows 平台上易于使用且安装快捷的选择。

解决方案 2:

分发 Python 应用程序的常规方法是使用distutils。它既可用于分发库类型的 Python 模块,也可用于分发 Python 应用程序,不过我不知道它在 Windows 上是如何工作的。无论如何,如果使用 distutils,则必须在 Windows 上单独安装 Python。

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

解决方案 3:

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

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

我在阅读Python 打包概述时偶然发现了它。他们在那里贴了一张漂亮的图片:
在此处输入图片描述

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

解决方案 4:

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

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

解决方案 5:

我认为IronPython有一个适用于 Windows 的内置编译器:

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

解决方案 6:

如果您在 Windows 上分发,请使用安装程序安装所有相关文件/解释器,无论需要什么。分发 setup.exe。这是在 Windows 上最好的方法。否则用户会抱怨。

解决方案 7:

对于 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 FilesMicrosoft Visual Studio 9.0VC
edistx86Microsoft.VC90.CRT*.*'))]
setup(
    data_files=data_files,
    ...
)

https://py2exe.org有一个简单易懂的教程,大约有 3 页长。

解决方案 8:

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

  • Miniconda-Install - powershell/bash 脚本,可自动下载 Miniconda 并为应用程序创建独立的 conda 环境。支持 pip,但似乎无人维护,并且存在 https 下载问题。

  • Anaconda Project和Continuum 的(conda) 构造函数。两者都使用 conda。(conda) 构造函数似乎能够在 Windows 上创建自包含安装程序,甚至 NSIS 安装程序,但不支持 pip。似乎表现得像 Anaconda/Miniconda 安装程序。

  • PyAppShare - 最终用户首先安装 Miniconda/Anaconda(类似于运行时环境)。然后,单个安装批处理/bash 脚本根据 yaml 规范创建独立的 conda 环境。该应用程序本身也是一个 conda/pip 包,安装到环境中并创建可执行入口点。自动创建跨平台桌面和程序快捷方式。它们激活环境并启动应用程序。支持 pip。

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

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2757  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1693  
  在全球化的浪潮下,企业的业务范围不断拓展,跨文化协作变得愈发普遍。不同文化背景的团队成员在合作过程中,由于语言、价值观、工作习惯等方面的差异,往往会面临诸多沟通挑战。而产品生命周期管理(PLM)系统作为企业管理产品全生命周期的重要工具,如何有效支持跨文化协作成为了关键问题。通过合理运用沟通策略,PLM系统能够在跨文化团...
plm是什么软件   15  
  PLM(产品生命周期管理)系统在企业的产品研发、生产与管理过程中扮演着至关重要的角色,其中文档版本控制是确保产品数据准确性、完整性和可追溯性的关键环节。有效的文档版本控制能够避免因版本混乱导致的错误、重复工作以及沟通不畅等问题,提升企业整体的运营效率和产品质量。接下来,我们将深入探讨 PLM 系统实现文档版本控制的 6...
plm是什么意思   19  
  PLM(产品生命周期管理)项目管理旨在通过有效整合流程、数据和人员,优化产品从概念到退役的整个生命周期。在这个过程中,敏捷测试成为确保产品质量、加速交付的关键环节。敏捷测试强调快速反馈、持续改进以及与开发的紧密协作,对传统的测试流程提出了新的挑战与机遇。通过对测试流程的优化,能够更好地适应PLM项目的动态变化,提升产品...
plm管理系统   18  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用