跳转到主要内容

使用Python创建独立的Mac OS X应用程序

项目描述

py2app是Python setuptools命令,它允许您从Python脚本中创建独立的Mac OS X应用程序捆绑包和插件。

py2app在目的和设计上类似于Windows上的py2exe。

注意:py2app必须在macOS上使用来构建应用程序,它不能在其他平台上创建Mac应用程序。

py2app 0.28.8

  • #525: 修复与setuptools 70的冲突。

  • 添加对python 3.13的支持

py2app 0.28.7

  • 引入对Python 3.12的支持

py2app 0.28.6

  • 修复对Python 2.7的支持

    这些是尽力而为的更改,我不再有一个可以进行良好测试运行的环境。

py2app 0.28.5

  • 更新黑名单食谱

    由于依赖于“egg”规范中的元数据文件,该文件未被black当前构建工具包含,因此黑名单食谱不再适用于最近的black版本。

    现在,该食谱会扫描与mypyc编译扩展模块相邻的python代码,以检测依赖项,并使用这些依赖项来更新依赖关系图。这应该确保在将来能够自动检测到black的新依赖项。

  • 更新wheel依赖项

py2app 0.28.4

  • 修复与Python 3.11不兼容的问题

py2app 0.28.3

  • #453: 修复在py2applet中指定包含在应用程序包中的目录时崩溃的问题。

py2app 0.28.2

  • 修复与最近setuptools版本的不兼容问题

py2app 0.28.1

  • #448: 修复qt6食谱中的错别字

  • #444: 修复使用py2app时将标准输出和标准错误流设置为非阻塞的问题。

    由于某种原因,“ibtool”命令(Xcode的一部分)在编译NIB文件时将这些流设置为非阻塞。我添加了一个上下文管理器,可以重置这些流的非阻塞状态。

  • PR #446: 修复适用于PyQt5较新版本的Qt5食谱

    由kangi提交

  • #447: 修复使用py2applet --help时出现的错误

    这个问题是在修复#414时引入的

py2app 0.28

  • PR #410: 修复在NamedTemporyFile调用中的错别字

    由MAKOMO提交

  • #414:setuptools 61.0中自动发现的工作方案

    setuptools 61.0引入了分布属性的自发现,这破坏了py2app。此版本在py2app中引入了一个setuptools.finalize_distribution_options入口点,当它们尚未设置(在自发现启动之前)时,将以与py2app主代码兼容的方式设置分布的namepy_modules属性。

    在py2app的旧版本中,使用setuptools 61.0或更高版本构建应用程序可能以两种方式失败

    • 生成的应用程序的名称不是基于脚本名称,而是其他值。

    • 调用python setup.py py2app会导致错误,提到发现多个顶级模块

  • PR #418: 为black添加食谱

    由mrclary提交

  • #417: 还包括可编辑安装的package dist-info

  • qt5和qt6食谱使用dodge逻辑来检测Qt库本身是否位于python包中,导致Qt的重复副本。

  • #406: 修复与python 2.7不兼容的问题

    py2app 0.24意外地破坏了与Python 2.7的兼容性,此版本修复了这个问题。

    这是最后一个支持Python 2.7的版本,下一个版本将包含确保只能在Python 3上安装的包元数据。

  • #413: 在包含的pythonXX.zip中查找dist-info

    默认情况下,pkg_resources的working_set不包含zip文件中包含的包的分布信息,例如py2app包中的zip stdlib + site-pakckages。

    向使用pkg_resources的应用程序添加一些猴子补丁来修复此问题。

  • 当包内容不符合食谱期望时,修复“rtree”食谱中的硬崩溃

  • #408: 添加site.PREFIXES的定义

  • #412: 修复与setuptools 60.8.1不兼容的问题

    setuptools食谱没有识别出pkg_resources中的所有vendor依赖项,这破坏了使用pkg_resoures的应用程序包。

  • PR #388: 在site.py中添加内置的“退出”和“退出”定义

    由mcclary提交

  • PR #388: 在site.py中设置“ENABLE_USER_SITE=False”

    由mcclary提交

  • PR #396: 更新pygame食谱以删除缺失的图标

    由glyph提交

py2app 0.27

  • #377: 当未安装PyQt5或PyQt6时,qt5和qt6食谱会导致py2app崩溃。

  • 问题 #401:修复与 setuptools 60.7 及以后版本的不兼容性

  • 问题 #391:弃用 tempfile.mktemp 的使用

  • 问题 #387:在 site.py 文件中添加 site.ENABLE_USER_SITE,用于应用程序(值始终为 False)。

py2app 0.26.1

  • 问题 #374:实际发布 0.26 版本中引入的“旧”存根可执行文件

py2app 0.26

  • 在 macOS 11 上重新编译了存根可执行文件

    这意味着轻模式/深色模式应该现在能够直接工作。

    当检测到使用旧版本的 Tk 构建时,仍然使用旧的存根可执行文件。

  • 问题 #1:在捆绑应用程序中包含 “.egg-info” 和 “.dist-info” 信息

    这修复了任何使用 pkg_resources 查找特定分布的 Python 包。

  • py2app.filters.not_stdlib_filter 现在知道 Python 的 “venv”

  • 问题 #368:添加配方 “detect_dunder_file”

    当该包中的模块使用 __file__ 变量时,此配方将确保 Python 包存储在 site-packages.zip 之外。

    此变量通常用于加载存储在包中的资源(而不是较新的 importlib.resourcespkg_resources 库)。

  • 问题 #339:添加 pydantic 的配方

    需要此配方,因为 pydantic 使用 Cython 编译所有源代码(包括 __init__ 包),因此隐藏了对依赖分析器的导入。

  • 问题 #338:将 “imageio_ffmpeg” 添加到 autopackages 中

  • PR367:添加 pandas、pylsp 和 zmq 的配方

  • PR367:将 docutils 和 pylint 添加到 autopackages 中

    由 Ryan Clary(GitHub 上的 mrclary)提交的 PR

  • 问题 #344:对整个捆绑包执行 codesign 有时失败

    Py2app 现在会尝试多次,然后才会放弃。这最多是一个权宜之计,并不能完全修复问题。

  • 问题 #370:py2app 现在支持 Python 3.10

    Python 3.10 也不再导出 py2app 存根可执行文件使用的(私有)符号。在可用的情况下,切换到公共 API 来完成相同的任务。

  • 问题 #110:添加 SQLAlchemy 的配方

    此配方包括所有方言和连接器,包括隐式依赖项,因为 SQLAlchemy 使用 __import__ 来加载依赖项。

  • 问题 #328:添加 gcloud 的配方

  • 问题 #195:将 USER_BASEgetuserbase()getusersitepackages() 添加到 py2app 的 site.py 版本中。

  • 问题 #184:添加 ‘ssl’ 的配方

    此配方仅用于 Python 3.4 或更高版本,并确保 Python ssl 模块使用的 CA 包含在应用程序捆绑包中,并且 OpenSSL 已配置为在应用程序捆绑包中查找该捆绑包。

  • 问题 #371:更改启动问题上的默认错误消息

    当应用程序无法启动时,现在显示的默认错误消息现在更加有用,并指向 py2app 调试页面

  • 问题 #345、#169:调整 qt5 和 qt6 配方以适应非 PyPI 安装

    现在,当 Qt 安装前缀位于 PyQt 包之外时,qt5 和 qt6 配方应该能够正常工作,例如当 PyQt 通过 homebrew 安装时。

    我已为此测试 PyQt5,并对 PyQt6 配方进行了相同的更改,尽管我没有测试该更改。

py2app 0.25

  • 问题 #358:添加 multiprocessing 的配方

  • PR363:添加 platformdirs 的配方

    由 Ryan Clary(GitHub 上的 mrclary)提交的 PR

  • PR353:添加 sphinx 的配方

    由 Ryan Clary(GitHub 上的 mrclary)提交的 PR

  • PR352:修复使用 ipython 的问题

    由 Ryan Clary(GitHub 上的 mrclary)提交的 PR

  • PR351:微调 matplotlib 配方

    由 Ryan Clary(GitHub 上的 mrclary)提交的 PR

  • PR348:修复 py2app 中检查已死亡符号链接的问题

    由 Oliver Cordes(GitHub 上的 ocordes)提交的 PR

  • 问题 #354:修复“autopackages”和“automissing”配方中的错误

  • 问题 #350:将 sentencepiece 添加到 autopackages 列表

  • 问题 #359:添加 PyQt6 的配方

  • 问题#349:添加OpenCV(opencv-python,导入cv2)的配方

  • 问题PR365:添加RTree配方

    由 Ryan Clary(GitHub 上的 mrclary)提交的 PR

py2app 0.24

  • 将仅包含包而不进行任何修改的配方合并为单个配方,以减少代码复杂性。

  • 将仅标记为预期缺失的导入的配方合并为单个配方,以减少代码复杂性。

  • 问题#334:在存档中包含Universal 2和arm64的二进制程序桩

    这些文件在仓库中,但被排除在源和wheel存档之外。

py2app 0.23

  • 问题#315:可执行程序桩的LC_RPATH指向Frameworks文件夹

    由Aleksandar Topuzović(atopuzov)提交的PR

  • 问题#322:将wxPython示例移植到4.0

    由Hamish Mcintyre-Bhatty(hamishmb)提交的PR

  • 问题#314:在PIL配方中不要使用Image.DEBUG,该属性已不再有效

    由Aleksandar Topuzović提交的PR

  • 问题#320:处理加载命令中的“@loader_path”

    在C扩展中,绑定到PyPI上C库的一种流行模式是将这些C库复制到wheel中,并使用C扩展中的“@loader_path”链接器命令引用它们。在此版本之前,py2app无法正确处理这些链接器命令。

  • 问题#298:添加pycryptodome的配方

  • 问题#282:添加h5py的配方

  • 问题#283:添加tensorflow的配方

    该配方仅将整个包包含在生成的应用程序捆绑包中,我尚未检查是否有方法可以减小此包(相当大)的大小。

py2app 0.22

  • 问题#319:为应用程序捆绑包添加临时代签

    macOS 11上的ARM64二进制文件必须进行签名,即使是临时代签。py2app现在将添加临时代签。

  • 问题#300:添加ARM64和Universal 2二进制文件的支持

  • 问题#299:修复使用Xcode随带的Python 3副本构建时的构建错误

  • 问题#281:生成的捆绑包在macOS 10.9和10.10上无法正常工作。

py2app 0.21

  • PR 277(Christian Clauss):修复一些Python 3问题

  • 问题#276:在10.12机器上重新构建二进制桩以修复启动

py2app 0.20

  • 迁移到GitHub

  • 问题#274:修复PyQt5配方中的问题

  • 修复macOS 10.15(Catalina)上的emulate-shell-environment选项的问题

  • 问题#269:py2app与Python 3.8不兼容

py2app 0.19

  • 问题#251:添加“botocore”的配方

  • 问题#253:“python setup.py py2app -A”从“venv”虚拟环境中创建无效的捆绑包

  • 更新PySide2的配方,并添加新的Shiboken2配方

    Alberto Sottile的补丁。

py2app 0.18

  • 问题#250:添加“six.moves”的配方,当six库被其他包作为供应商时也能工作

py2app 0.17

  • 问题#247:新的tkinter配方对于使用框架安装Tcl/Tk的安装方式没有正常工作

py2app 0.16

  • 问题#244:对于使用经典Unix安装Tcl/Tk(而不是框架构建)的Python构建,将Tcl/Tk支持库复制到应用程序捆绑包中。

    这导致当Python.org安装包含Tcl/Tk(如Python 3.7)时,应用程序捆绑包可以正常工作。

  • 不要因为应用程序使用了Pillow而将numpy复制到应用程序中

  • 添加Pyside的配方

    Alberto Sottile的补丁。

py2app 0.15

  • 修复Python 3.7的问题,特别是plistlib库中的更改(问题#242,#239)

  • 更新对macholib、altgraph和modulegraph的依赖

由于CPython 3.7.0中的一个错误,使用-O选项与该版本的CPython不兼容

py2app 0.14.1

  • 更新依赖

  • 更新PyPI元数据

py2app 0.14

功能

  • 开始使用flake8来改进编码风格

错误修复

  • 问题#222:问题#179的修复破坏了argv模拟器

  • 问题#226:py2app在报告可能缺失的模块时可能会失败

  • 问题#228:作为sys.exectuable包含在应用程序捆绑包中的python可执行文件不可执行

py2app 0.13

错误修复

  • PyObjC 的跟踪器中第 185 个问题:在 Python 3.6 或更高版本中,sysconfig 使用 __import__,这会混淆 modulegraph。

  • 拉取请求 #17:site-packages 在 “–user” 位置的位置已更改

    Matt Mukerjee 的补丁

功能

  • (尚无)

py2app 0.12

  • Armin Samii 的拉取请求 #15:更安全的符号链接和文件复制

  • 更新配方:许多配方名称与配方导入的顶级模块冲突。这会在 Python 2.7(无绝对导入)上引起问题

py2app 0.11

  • 确保应用程序主二进制文件的 stdout/stderr 流是无缓冲的。

    有关更多信息,请参阅 PyObjC 存储库中的问题 #177

  • 修复问题 #201:py2app 与 pyvenv 虚拟环境不兼容

    由 Oskari Timperi 进行额外修复。

  • 修复问题 #179:不再使用 ASL(默认情况下)将 stdout/stderr 流转发到 console.app,使用 “–redirect-stdout-to-asl” 启用重定向功能。

    请注意,由于不明原因,目前重定向在 OSX 10.12 上不起作用。

  • 修复问题 #188:lxml.isoschematron 存在问题

    包 ‘lxml.isoschematron’ 不是一个安全的 zip 文件,它尝试使用正常的文件系统 API 加载资源,这在包是 zip 文件的一部分时不起作用。

  • py2applet 现在默认不再使用 “argv_emulation”,这会导致太多问题。

  • 问题 #174:通过删除关于非模块内容的警告来清理关于缺少模块的总结

    还注意当某个模块可能是其他模块的别名时。这些更改应该会从 py2app 的输出中删除大量的误报警告。

  • 修复问题 #161:opengl 配方使用 Python 3 中不存在的 “file” 函数

  • 添加 “qt5” 配方,该配方针对 PyPI 上的 PyQt5 轮子执行正确操作(使用 PyQt5 5.6 进行测试)

  • 在 C 扩展的链接命令中添加对 “@loader_path” 的支持。

    这使得在构建应用程序包时可以使用由 delocate-listdeps 处理过的 wheel。

  • 不要报告预期缺失的导入

    Barry Scott 的补丁。

py2app 0.10

  • virtualenv 的配方调用了一个在最近版本中变为私有且因此不再与 py2app 0.9 一起工作的 modulegraph 方法。

    更新配方以解决这个问题。

py2app 0.9

  • 问题 #146、#147:MyApp.app/Contents/MacOS 中的 “python” 二进制文件是框架构建的小 stub 可执行文件,而不是实际的命令行解释器。结果是,您无法使用 sys.executable 启动新的解释器,这(以及其他问题)破坏了多进程。

  • 拉取请求 #7:将 PyQt5 添加到 sip 配方中。由 Mark Montague 补丁。

  • 拉取请求 #4:由于缩进错误,复制 PySide 插件时出错。

  • 拉取请求 #5:py2app 对于不使用 _sysconfigdata 的 Python 版本不工作。

  • 问题 #135:在编译 XIB 文件后不要暂停一秒

  • 问题 #134:在将文件复制到包中之前删除目标位置。

  • 问题 #133:确保应用程序的 “Framework” 文件夹位于 ctypes.util.find_library 的搜索路径中。

  • 问题 #132:依赖 modulegraph 0.12 以避免在 Python 代码包含对当前 Python 版本包含 SyntaxErrors 的兼容模块的引用时构建错误。

  • 在运行结束时明确报告无法找到的模块(对于非别名构建)

    注意:这只是警告,缺失的模块不一定有问题,因为 modulegraph 可以检测在 OSX 上未使用的模块的导入(例如)

  • 在运行结束时报告包含语法错误的模块(对于非别名构建)

    注意:这只是一个警告,当依赖树包含其他主要版本Python的模块时(例如包含Python 2兼容性代码的 compat_py2 模块,其中包含在Python 3中无效的代码),语法错误是有效的。

py2app 0.8.1

  • 当使用–no-chdir时,加载脚本不起作用

    由Barry Scott在私人邮件中报告。

py2app 0.8

py2app 0.8是一个功能发布版

  • 修复了OSX 10.9上的argv仿真器,该代码检测应用程序通过Finder启动的方式在该OSX版本中不起作用。

  • 启动程序二进制文件现在与Cocoa链接,这应该可以避免与沙盒应用程序的一些问题(特别是:当主二进制文件未链接到AppKit时,标准打开面板似乎在沙盒应用程序中不能正常工作)。

  • 当sysconfig和distutils.sysconfig不需要这些文件时(基本上,当使用任何较新版本的Python时),不要将Python的Makefile、Setup文件等复制到捆绑包中。

  • 修复了虚拟环境支持的一些问题

    • 使用虚拟环境时,系统Python安装的检测不正确。因此,当使用/usr/bin/python创建的虚拟环境时,py2app没有创建“半独立”捆绑包。

    • 从虚拟环境创建的“半独立”捆绑包包含的文件比应该的更多(特别是stdlib的一些部分)

  • 问题#92:添加选项“–force-system-tk”,确保Tkinter使用时链接到Apple构建的Tcl/Tk,即使它链接到Python标准库中的另一个框架。

    这将导致在Tkinter链接到一个不在/System/Library/Frameworks中存在的Tcl/Tk主要版本时构建错误。

  • 问题#80:添加将系统插件复制到应用程序捆绑包的支持。

    Py2app现在支持一个新选项include_plugins。这个值是一个包含应复制到应用程序捆绑包的插件的路径列表。

    列表中的项目是路径,或是一个包含插件类型和路径的元组

    include_plugins=[
      "MyPlugins/MyDocument.qlgenerator",
      ("SystemConfiguration", "MyPlugins/MyConfig.plugin"),
    ]

    Py2app目前知道以下插件后缀:.qlgenerator.mdimporter.xpc.service.prefPane.iaplugin.action。这些插件可以添加而无需指定插件类型。

  • 问题#83:Setup.py现在拒绝在不为Mac OS X的平台上进行安装。

    这使得明确该软件包仅支持OSX,避免了以后出现的混淆错误。

  • 问题#39:现在可以在py2app的“packages”选项中包含子包。

  • 问题#37:添加pyEnchant配方

    ..note

    The recipe only works for installations of pyEnchant
    where pyEnchant is stored in the installation (such
    as the binary eggs on PyPI), not for installations
    that either use the "PYENCHANT_LIBRARY_PATH" environment
    variable or MacPorts.
  • 问题#90:删除了‘email’配方,但需要足够新的modulegraph版本。因此,py2app现在需要modulegraph 0.11或更高版本。

py2app 0.7.4

  • 问题#77:在OSX 10.8中,应用程序和插件捆绑包的stdout/stderr流最终没有进入Console.app(如OSX早期版本中那样)。这是由于OSX的一个变化。

    在这个版本中,应用程序可执行文件将写入stdout和stderr流的操作转换为ASL日志子系统,使用需要的选项以便在Console.app的默认视图中结束。

    注意:插件捆绑包的stdout和stderr流没有被重定向,因为改变宿主应用程序的全局环境是不太好的做法。

  • 现在,i386、x86_64和intel stub二进制文件在OSX 10.8上使用clang编译,而不是较旧的GCC版本。其他stub版本仍然在OSX 10.6上编译。

  • 问题#111:由py2app生成的site.py现在包含一个USER_SITE变量(默认值为None),因为一些软件试图导入这个值。

  • Py2app没有保留复制到应用程序捆绑包的文件的时戳,这可能导致字节编译的文件看起来比相应的源文件旧(对于使用“packages”选项复制到捆绑包的软件包)。

    与问题 #101 相关

  • Py2app 还没有复制文件权限到应用程序包中复制的文件,这通常不是问题,但确实导致二进制文件失去了可执行权限(如 Stackoverflow 上所述)

  • 问题 #101:在调用 Py_Initialize 之前在环境中设置“PYTHONDONTWRITEBYTECODE”,以确保解释器不会尝试写入字节码文件(这在使用沙盒应用程序时可能会引起问题)。

  • 问题 #105:当主脚本有除 ASCII 编码以外的编码时,py2app 现在可以创建应用程序和插件包,尤其是对于 Python 3。

  • 问题 #106:确保 PIL 脚本在 Python 3 上工作。PIL 本身尚未移植,但 Pillow 与 Python 3 兼容。

  • “python setup.py install” 现在会失败,除非机器运行的是 Mac OS X。

    我看到了许多用户尝试在 Windows 或 Linux 上使用 py2app 构建OSX应用程序的报告。这是不行的,py2app 现在在安装过程中会失败以明确表示。

  • 禁用了 python 3.x 的 'email' 脚本,因为那里不需要它。

  • 问题 #91:添加了 lxml <http://lxml.de/> 的配方,这是必需的,因为 lxml 从一个扩展执行了多个导入,而这些导入无法由 modulegraph 自动检测。

  • 问题 #94:应用程序包中的 site-packages zip 文件现在包含目录的 zipfile 条目。这是为了解决 Python 3.3 的 zipimporter 中的错误:它不会将 'pkg/foo.py' 认为在命名空间包 'pkg' 中,除非存在 'pkg' 文件夹的 zipfile 条目(或者有 'pkg/__init__.py' 条目)。

  • 问题 #97:修复了当使用 'qt_plugins' 选项的 'image_plugins' 时 pyside 和 sip 脚本的问题。

  • 问题 #96:py2app 应该再次与 python 2.6 兼容(由于使用了 python 2.7 中引入的 sysconfig 模块,之前版本无法工作)

  • 问题 #99:appstore 需要在嵌入式框架中包含多个符号链接。

    (版本 0.7 已经添加了链接 Python.frameworks/Versions/Current,此版本还添加了 Python.framework/Python 和 Python.framework/Resources,其值为 appstore 上传工具所需)。

  • 当在 '–packages' 选项(无论是显式还是通过配方)中提及时,py2app 会将 stdlib 软件包复制到应用程序包中,用于半独立构建。这不是故意的,半独立构建应该依赖于外部 Python 框架的 stdlib。

py2app 0.7.3

py2app 0.7.3 是一个错误修复版本

  • 问题 #82:从 py2app.util.LOADER 中移除了导致 Python 3 问题调试打印语句。

  • 问题 #81:当尝试为 Python 的 Unix 风格共享库构建(--enable-shared)构建包时,py2app 现在会尝试构建失败,除非您使用的是足够的足够高的 patchlevel 的 python(2.7.4、3.2.3、3.3.1、3.4.0,所有这些尚未发布)。

    添加构建失败是为了避免尝试启动生成的应用程序时由于 Python 读取环境方式中的错误而导致的非常令人困惑的错误。

  • 当 Python 二进制文件根本不包含共享库(或框架)时,py2app 也会给出错误消息。

  • 问题 #87:在复制包数据时忽略 '.git' 和 '.hg' 目录('.svn' 和 'CVS' 已经被忽略)。

  • 问题 #65:0.7 版本中修复以避免复制链接库两次的问题导致一些用户出现问题,因为只有一个文件名最终出现在应用程序包中。此版本确保两个名称都存在(一个作为指向另一个的符号名称)。

  • 问题 #88:确保修复 #65 的过程中不会尝试创建指向自身的符号链接。例如,在使用 homebrew 的情况下,暴露的 lib 目录包含指向 cellar 的符号链接,而 tye install_name 没有提到“public” lib 目录。

    $ ls -l /opt/homebrew/lib
    ...
    libglib-2.0.0.dylib -> ../Cellar/glib/2.32.4/lib/libglib-2.0.0.dylib
    ...
    
    $ otool -vL /opt/homebrew/lib/libglib-2.0.0.dylib
    /opt/homebrew/lib/libglib-2.0.0.dylib:
       /opt/homebrew/lib/libglib-2.0.0.dylib (compatibility version 3201.0.0, current version 3201.4.0)
       time stamp 1 Thu Jan  1 01:00:01 1970
    ...

py2app 0.7.2

py2app 0.7.2 是一个错误修复版本

  • 问题 #75:不要删除 --dist-dir,只需删除我们试图构建的旧版对象(如果存在)。

    这再次使得在同一个目标文件夹(如应用程序的插件文件夹)中构建多个 setup.py 文件成为可能。

  • 问题 #78:使用 --packages 选项添加的包最终没有出现在半独立应用程序的 sys.path 中。

    由 Steve Strassmann 报告

  • 问题 #76:使用扩展模块的半独立包不能使用扩展,除非它们也使用了 --site-packages 选项(并且扩展在 site-packages 目录中)。

    修复了在系统安装 Python 时使用 PyQt 和 wxWidgets 时的一些问题。

    由 Dan Horner 提供补丁。

  • 目前无法在“packages”选项的包列表中使用子包(如“foo.bar”)。Py2app 现在会明确检查这一点,并在构建一个无法工作的应用程序时打印错误信息。

    问题:#39

py2app 0.7.1

py2app 0.7.1 是一个错误修复版本

  • 始终包含‘pkg_resources’,这对于正确使用 setuptools 命名空间包是必需的,这些 __init__.py 文件包含 __import__('pkg_resources'),而这个调用没有被字节码扫描器识别为导入。

  • 问题 #67:由于使用了‘raw_input’,py2applet 在 Python 3 上无法工作

    由 Andrew Barnert 报告

  • 问题 #68:在 0.7 版本中引入的“extra-scripts”功能无法复制与“setup.py”不在同一目录中的脚本。

    由 Andrew Barnert 报告

  • 对于半独立应用程序,应用程序内部的“lib-dynload”目录不在“sys.path”中,这导致使用不在 stdlib 中的扩展时启动失败。

  • 问题 #70:当脚本使用 Windows 行结束符时,应用程序无法启动

    由 Luc Jean 报告

py2app 0.7

py2app 0.7 是一个错误修复版本

  • 问题 #65:当两个库使用不同名称链接到同一个库时(一个引用真实名称,另一个引用符号链接)生成的捆绑包会崩溃。

    例如,这是在使用 homebrew 安装 wxWidgets 的情况下使用 wxWidgets 的应用程序。

    由“Bouke”报告

  • 问题 #13:现在可以将辅助脚本添加到捆绑包中,例如创建一个 GUI 以在后台启动辅助脚本。

    这可以通过使用选项“–extra-scripts”来实现,其值是脚本文件列表(“.py”或“.pyw”文件)。

  • 更智能的 matplotlib 配方,现在可以指定应包含哪些后端。问题 #44,由 Adam Kovics 报告。

    --matplotlib-backends(或 setup.py 中的“matplotlib_backends”)的参数是一个要包含的插件列表。使用“-”来排除除通过导入语句分析找到的以外的后端,使用“*”来包含所有后端(但不一定包括所有 matplotlib)

    例如,使用 --matplotlib-backends=wxagg 仅包含 wxagg 后端。

    默认情况下,包含整个 matplotlib 包。

  • py2app 配方中包含的包没有被 modulegraph 处理,因此它们的依赖项并不总是包含在内。

  • 修复虚拟环境支持:在虚拟环境中构建别名失败。

    (在虚拟环境环境中,半独立和别名插件捆绑包仍然存在一些问题)。

  • 问题 #18:改进了PyQt和PySide支持。

    Py2app现在有一个名为“–qt-plugins”的新选项(或者在setup.py中为“qt_plugins”),此选项指定应包含在应用程序包中的插件列表。列表项可以有多种形式

    • “plugintype/libplugin.dylib”

      指定一个特定的插件

    • “plugintype/*foo*”

      使用glob模式指定一个或多个插件

    • “plugintype”

      包含该类型的所有插件,等同于“plugintype/*”。

    插件被复制到“Resources/qt_plugins”,py2app还会添加一个指向该位置的“qt.conf”文件,以便查找插件。

  • 问题 #49:zip文件格式的包数据现在被正确地复制到包中,而不是提取归档。

  • 问题 #59:编译site.py以确保生成的包在第一次运行时不会更改。

    这对于一般情况来说是个好主意,在代码签名时更是必要,因为添加新文件后签名将失效。

    由Michael McCracken报告。

  • 问题 #60:“email”包的配方没有加载

    由Chris Beaumont报告。

  • 问题 #46:py2app不再警告关于Qt许可证。我们也不会警告其他可能带有GPL许可证的软件,py2app也不是一个许可证执行工具。

    由briank_in_la报告。

  • 生成的包总是以python优化激活的状态开始(即,就像作为‘python -O’运行一样)。

  • 修复问题 #53:如果数据文件恰好是zip文件,py2app会崩溃。

  • py2app将包目录中的数据文件复制到应用程序包中。它也为此代表子包的目录做了这件事,这使得无法排除子包。

  • 添加了wxPython的配方,因为wxPython的一些子包使用__path__技巧,这会混淆modulegraph。

  • 配方现在可以返回“includes”列表的额外条目列表。

  • 重写了matplotlib的配方。配方不再包含整个包,而是只包含“mpl-data”目录。

    警告:此配方已经有限度地测试。

  • 修复argv_emulation.py中的混合缩进(制表符和空格),这导致在python 3.x上安装失败(问题 #40)。

  • 问题 #43:py2app现在在嵌入式Python框架的“Versions”目录中创建一个名为“Current”的符号链接,以符合Mac App-store的要求。

  • 在某些OSX版本中,应用程序在启动时会同时接收到“open application”和“open documents”Apple事件,这破坏了argv_emulation.py中的假设。

  • py2app在显式关闭文件方面更为严格,这避免了未关闭文件的ResourceWarnings。

  • 修复Python 3.2上半独立构建的测试问题。

  • 添加了pyzmq的配方。

  • 不要使用Python.framework的Info.plist中的版本信息,而是使用sys.version_info。这解决了与EPD的构建问题。

  • 在复制包数据时忽略更多文件

    • VIM交换文件(.foo.py.swp)

    • 为许多工具创建备份文件:foo.origfoo~

py2app 0.6.4

py2app 0.6.4是一个错误修复和较小功能版本。

  • 问题 #28:argv模拟器在OSX 10.5的64位模式下崩溃。

    修复此问题需要再次重写argv_emulator代码。

  • 添加了“–arch=VALUE”选项,可以用来选择主可执行文件的架构集合。默认为支持Python解释器的架构集合,可以用来取消支持某些架构(例如,当你使用一个同时支持32位和64位代码的python二进制文件,并使用一个尚未在64位模式下工作的GUI库时)。

    参数的有效值是以下列表中使用的架构和以下架构组

    • fat: i386, ppc

    • fat3: i386, x86_64, ppc

    • universal: i386, x86_64, ppc, ppc64

    • intel: i386, x86_64

  • 问题 #32:修复当应用程序使用PySide时的崩溃问题

    这部分在 macholib(版本1.4.3)中得到部分修复。

  • py2app 的 '-O' 标志现在在 Python 2.6 或更高版本使用时默认为 Python 优化级别。

  • 问题 #31:在运行时尊重优化标志。

    直到现在,由 py2app 创建的应用程序包即使用户指定了应该使用 "-O" 标志,也能在没有 "-O" 标志的情况下运行。现在已修复。

  • 问题 #33:py2app 的应用程序包启动器现在清除环境变量 PYOBJC_BUNDLE_ADDRESS,避免在使用 PyObjC 时从基于 py2app 的插件包启动的应用程序中崩溃。

  • py2app 的包启动器设置了环境变量 PYOBJC_BUNDLE_ADDRESS,这个变量现在已弃用。请使用 PYOBJC_BUNDLE_ADDRESS<PID> 代替(用当前进程的进程 ID 替换 <PID>)。

  • 现在,当使用系统 Python 时,我们明确将 Apple 的附加包(如 PyObjC 和 Twisted)添加到 sys.path

    这修复了由 Sean Robinson 报告的问题:py2app 以前在您使用这些包时创建了一个无法工作的包,因为这些包没有被包含(正如预期的那样),但也没有在 sys.path 中可用。

  • 修复了 sip 的配方,从而确保 PyQt4 应用程序正常工作。

    与之前一样,SIP 配方相当原始,当检测到使用 SIP 的模块时,它将包含应用程序包中的所有 SIP 基于的包。

  • “资源”文件夹不再位于 Python 搜索路径中,它包含脚本,而 Python 模块和包位于 site-packages 目录中。此更改与问题 #30 相关。

  • “Resources/Python/site-packages” 文件夹不再位于 Python 搜索路径中。此文件夹不由 py2app 本身使用,但可能被用于封装 py2app 的自定义构建脚本。

  • 问题 #30:当脚本文件与应用程序使用的 Python 包同名时,py2app 打包的应用程序无法正确启动。

  • 问题 #15:py2app 现在有一个选项来模拟在终端中打开窗口时获得的shell环境。

    用法:python setup.py py2app --emulate-shell-environment

    此选项是实验性的,它远未确定在所有系统上都能实现。

  • 问题 #16:现在 --argv-emulation 与 Python 3.x 和 64 位可执行文件一起工作。

  • 问题 #17:当使用 64 位 Python 构建时,py2applet 脚本默认将 'argv_emulation' 设置为 False,因为该选项不支持此类构建。

  • py2app 现在在执行任何操作之前清除 'build' 中的临时目录和 'dist' 中的输出目录。这避免了先前构建的结果与当前构建之间的不必要交互。

  • 问题 #22:当指定的版本无效时,py2app 将给出错误,而不是在生成的可执行文件中导致崩溃。

  • 问题 #23:当 setuptools 将 .egg 目录隐式添加到 sys.path 时,py2app 无法工作,并且使用了 "-O" 选项(例如 python setup.py py2app -O2)。

  • 问题 #26:当使用具有框架构建的 Python 的 virtualenv 时,py2app 将错误的可执行文件复制到应用程序包中。

py2app 0.6.3

py2app 0.6.3 是一个错误修复版本

  • py2app 无法编译 .xib 文件(如 pythonmac-sig 邮件列表上所报告的)。

py2app 0.6.2

py2app 0.6.2 是一个错误修复版本

  • py2app 无法将图标文件复制到应用程序包中(由 Russel Owen 报告)。

  • py2app 失败,未能复制资源和数据文件(py2ap选项字典中的resource键和setup函数的data_files参数)。

    问题 #19,由 bryon(at)spideroak.com 报告。

  • 由于对sys.prefix和sys.executable之间关系的假设,py2app在使用虚拟env构建应用程序包时失败。

    由Erik van Zijst报告并修复。

  • 确保将“examples”目录包含在源存档中

py2app 0.6.1

py2app 0.6.1是一个错误修复版本

错误修复

  • 当Python包包含包含数据的zip文件时,py2app无法构建包。

    此版本通过一个粗略的 workaround 解决了这些问题(当文件名以‘.zip’结尾时问题得到修复)。

  • 当存根可执行文件比源代码旧时,重新创建存根可执行文件的代码现在使用xcode-select查找SDK的根目录。

    这使得在同时安装了Xcode 3和Xcode 4且Xcode 3为默认Xcode的机器上重新创建这些可执行文件成为可能。

  • 使用Xcode 3重新生成了存根可执行文件

    警告:Xcode 4不能用于重新构建存根可执行文件,尤其是那些支持PPC架构的。

  • 不要自动重新构建存根可执行文件,这在使用Xcode 4时是不安全的,并且可能会在文件以不同于预期的顺序安装时意外触发。

  • 对测试套件进行小调整,以确保它们在同时安装了Xcode3和Xcode4的系统上工作(Xcode3必须是选定的版本)。

  • setupClass失败时,在测试套件中进行更好的清理。

py2app 0.6

py2app 0.6是一个小功能发布

功能

  • 现在可以通过使用setup()函数的“install_requires”参数来指定构建包时必须可用的Python发行版

    setup(
    
        ...
        install_requires = [
               "pyobjc == 2.2"
        ],
    )
  • py2app现在可以打包使用pip 或setuptools安装选项--single-version-externally-managed安装的命名空间包

  • 基于Virgil Dupras的补丁,包模板现在支持Python3

  • alias构建不再使用Carbon Aliases,因此也支持Python3(Virgil Dupras的补丁)

  • argv模拟在Python 3中不起作用,此版本会告诉你这一点,而不是默默地失败构建一个可工作的包。

  • 为argv模拟代码添加对自定义URL的支持(Brendan Simon的补丁)

    您必须将“CFBundleURLTypes”键添加到您的Info.plist中才能使用此功能,argv模拟代码将确保要打开的URL最终会在sys.argv中。

  • py2app.util包含了一些现在已弃用并将被未来版本删除的函数,具体包括:os_path_islinkos_path_isdirpath_to_zipget_zip_dataget_mtimeos_readlink

  • py2app.simpleio模块不再存在,并且从未应该存在于存储库中(它是I/O层重写的失败部分)。

错误修复

  • 修复了由Dan Ross报告的复制的框架中符号链接的问题。

  • py2applet在Python 3.x中不起作用。

  • 在构建插件包时,--alias选项不起作用(问题#10,由Virgil Dupras修复)

  • 避免在实现PEP 3147(Python 3.2及以后版本)的Python版本中复制__pycache__目录

  • 使用Python 3的App包现在可以在包含非ASCII字符的全名目录中存储应用程序时正常工作。

  • 请勿编译.nib文件,这并非严格必需,并且会破坏仍使用NibClassBuilder代码的PyObjC项目。

  • 在尝试将不存在的文件作为资源包含时,提供了更好的错误信息。

  • 当发生异常时,不要进入PDB。

  • 问题#5:避免在包的可执行文件中可能发生的堆栈溢出。

  • 问题#9:与Python 3.2兼容。

  • 修复与Python 2.5相关的构建问题(由于使用了过于现代的distutils命令子类)。

  • 自切换到mercurial以来,源分发没有包含所有必需的文件,我已添加了一个MANIFEST.in文件,而不是依赖于setuptool自动猜测要包含的文件。

  • 包模板再次与半独立构建(如使用系统Python时)一起工作,这重写了前面提到的问题#10的修复。

  • 确保py2app在源位于包含非ASCII字符的名称的目录中时能正常工作。

py2app 0.5.2

py2app 0.5.2是一个错误修复版本。

错误修复

  • 确保在系统Python 2.5中使用时找到正确的存根可执行文件。

py2app 0.5.1

py2app 0.5.1是一个错误修复版本。

错误修复

  • 确保存根可执行文件包含在egg文件中。

  • 修复32位构建的bundletemplate存根可执行文件名称。

py2app 0.5

py2app 0.5是一个小功能版本。

功能

  • 添加了对Python配置脚本的--with-framework-name选项的支持,即:py2app现在在Python框架不以“Python.framework”命名时也能正常工作。

  • 添加了对Python各种构建版本(32位、3-way等)的支持。

  • py2app现在确实在我的系统上工作(ronaldoussoren@mac.com),其中Python解释器位于虚拟env环境中。

  • 对Python 3的实验性支持。

错误修复

  • 修复matplotlib的配方:该配方在当前版本的matplotlib和pytz中会导致异常。

  • 在alias-build引导代码中使用现代API,否则在Python 64位构建上“py2app -A”将导致包损坏。(由James R Eagan提供的补丁)

  • 在PIL配方中尝试“import Image”和“from PIL import Image”。(由Christopher Barker提供的补丁)

  • 存根可执行文件现在适用于64位应用程序包。

  • (底层)将应用程序存根重写为使用dlopen而不是dyld API。这消除了编译时的弃用警告。

py2app 0.4.3

py2app 0.4.3是一个错误修复版本。

错误修复

  • build_app.py中的格式字符串错误导致无法将Python框架复制到应用程序包中。

py2app 0.4.2

py2app 0.4.2是一个小功能版本。

功能

  • 当指定“–strip”选项时,我们现在也从包中删除“.dSYM”目录。

  • 移除对Python框架中“version.plist”文件的依赖。

  • PyQt 4.x添加了新的配方。此配方由Kevin Walzer捐赠。

  • virtualenv添加了新的配方,这允许您从虚拟环境中使用py2app。

  • 添加了对将.xib文件(Interface Builder 3的NIB文件)转换为的支持。

  • 引入了数据转换器的实验性插件API。

    应将转换插件定义为py2app.converter组的入口点。

     setup(
       ...
       entry_points = {
               'py2app.converter': [
                   "label          = some_module:converter_function",
                ]
        },
        ...
    )

    转换函数应定义如下

    from py2app.decorators import converts
    
    @converts('.png')
    def optimze_png(source, proposed_destionation, dryrun=0):
       # Copy 'source' to 'proposed_destination'
       # The conversion is allowed to change the proposed
       # destination to another name in the same directory.
       pass

其他修复

  • 此修复解决了将不同的Python版本复制到应用程序/插件包中而不是用于运行py2app的版本的问题。

py2app 0.4.0

py2app 0.4.0是一个小功能版本(并且从未正式发布)。

功能

  • 支持CoreData映射模型(在Mac OS X 10.5中引入)。

  • 支持存储在zip文件中的Python包(例如zip_safe Python eggs)。

错误修复

  • 修复使用包含框架的别名包创建错误符号链接目标。

  • Stuffit倾向于递归提取归档文件,这导致py2app创建的包中存在未解压的代码归档。这个版本为Stuffit提供了对该“功能”的解决方案。

  • 在字符串格式化函数(在应用和包模板中)中传递非常量字符串时,请更加小心,以避免在某些条件下崩溃。

py2app 0.3.6

py2app 0.3.6是一个小版本修复发布。

错误修复

  • 确保自定义图标被复制到输出包中

  • 解决与某些haxies和inputmanager插件的兼容性问题

py2app 0.3.5

py2app 0.3.5是一个小版本修复发布。

错误修复

  • 解决disable_linecache问题

  • 修复Info.plist和插件的Python路径

py2app 0.3.4

py2app 0.3.4是一个小版本修复发布。

错误修复

  • 在py2applet脚本中修复了一个拼写错误

  • 从包模板中删除了一些,但并非所有的编译器警告(该模板仍然可能存在缺陷)

py2app 0.3.3

py2app 0.3.3是一个小版本修复发布。

错误修复

  • 修复了argv模拟代码中的拼写错误

  • 删除了不必要的py2app.install黑客(setuptools已经做了)

py2app 0.3.2

py2app 0.3.2是一个主要错误修复版本。

功能变更

  • 大幅更新了文档

  • 新添加了prefer-ppc选项

  • 新增了numpy、scipy、matplotlib等新配方

  • 更新了py2applet脚本来接受选项,提供–make-setup

错误修复

  • 不再默认为LSPrefersPPC

  • 替换了stdlib中argvemulator的使用,改为内联版本以兼容i386

py2app 0.3.1

py2app 0.3.1是一个小版本修复发布。

功能变更

  • 新增EggInstaller示例

错误修复

  • 现在确保可执行文件是+x(从egg安装时可能不是这种情况)

py2app 0.3.0

py2app 0.3.0是一个主要功能增强版本。

功能变更

  • 新增–xref(-x)选项,类似于py2exe,生成一个包含模块及其相互依赖关系的HTML文件列表

  • sys.executable现在指向与常规可执行文件并行的常规Python解释器,因此启动子解释器应该更加可靠

  • 应用程序引导现在检测包含“:”的路径,并将提供友好的错误消息而不是直接崩溃 <https://pythonlang.cn/sf/1507224>。

  • 应用程序引导现在设置PYTHONHOME而不是大的PYTHONPATH

  • 应用程序引导用C语言重写,根据需要动态链接到CoreFoundation和Cocoa,因此它不意味着特定的运行时版本。

  • 文档和示例已更改,使用setuptools而不是distutils.core,这样就不需要py2app导入

  • 重构以使用setuptools,以egg的形式分发。

  • macholib、bdist_mpkg、modulegraph和altgraph现在是分别维护的包,可以在PyPI上作为egg获取

  • macholib现在支持小端架构、64位Mach-O头和文件中的多个头(胖/通用二进制文件)的读写

py2app 0.2.1

py2app 0.2.1是一个小版本修复发布。

错误修复

  • macholib.util.in_system_path现在理解SDK了

  • DYLD_LIBRARY_PATH搜索已修复

  • 框架和排除选项应该可以再次工作。

py2app 0.2.0

py2app 0.2.0是一个小版本修复发布。

功能变更

  • 新增datamodels选项以支持CoreData。编译.xcdatamodel文件并将它们放置在Resources目录中(作为.mom)。

  • 新增use-pythonpath选项。py2app应用程序引导将不再使用PYTHONPATH中的条目,除非使用此选项。

  • py2app现在将有关构建环境的信息(Python版本、可执行文件、构建风格等)持久化在Info.plist中,并且在任何更改发生时都会在重新构建前清理可执行文件。

  • bdist_mpkg现在使用完整平台信息构建包,因此为某个平台组合安装的包不会看起来像是另一个平台组合的升级。

错误修复

  • 修复了独立构建中的错误,重建可能会导致无法启动的可执行文件。

  • 插件引导程序应能够正确编译/链接到gcc 4。

  • 插件引导程序不再设置PYTHONHOME,并在初始化后恢复PYTHONPATH。

  • 如果插件是第一个初始化Python的,则插件引导程序会在加载插件时交换线程状态。这解决了线程问题。

py2app 0.1.9

py2app 0.1.9是一个小的错误修复版本。

已修复的错误

  • bdist_mpkg现在构建的zip文件可以由所有已知的工具正确解压。

  • 引导程序的行为略有变化,现在__file__应指向主脚本,而不是引导程序。主脚本也已从Resources/Python移动到Resources,因此__file__相对资源路径应该仍然有效。

py2app 0.1.8

py2app 0.1.8是一个重大增强版本

已修复的错误

  • 包含的框架中的符号链接应正确保留(修复了Tcl/Tk)

  • 修复了一些与别名包相关的小问题

  • 在PIL配方中删除了隐式的SpiderImagePlugin -> ImageTk引用

  • --optimize选项现在应该可以工作了

  • weakref现在默认包含

  • anydbm的动态依赖现在在标准的隐含列表中

  • 应用启动时的错误现在会带到前台,以免用户错过它们

  • bdist_mpkg现在与pychecker兼容(data_files有问题)

选项已更改

  • 弃用--strip,现在默认启用

  • 新的--no-strip选项用于关闭可执行文件的去留程序

新功能

  • 查找修改过的PyOpenGL __init__.py版本,以便不需要包含整个包就可以获取愚蠢的版本文件。

  • 新的loader_files键,配方可以返回它以确保非代码最终出现在.zip中(pygame配方使用此功能)

  • 现在扫描包中的所有文件并标准化Mach-O加载命令,而不仅仅是扩展。这有助于在使用--package选项时,包括具有插件的框架等。

  • 现在将嵌入的Python解释器包含在可执行文件包中(sys.executable指向它),这目前仅适用于Python的框架构建

  • 新的macho_standalone工具

  • 新的macho_find工具

  • 对插件构建方式进行了重大改进

  • bdist_mpkg现在有一个--zipdist选项,可以从构建的包中构建zip文件

  • bdist_mpkg的“安装到:”描述现在基于包安装根,而不是构建根

py2app 0.1.7

py2app 0.1.7是一个错误修复版本

  • bdist_mpkg脚本现在将设置sys.path,以供需要本地导入的设置脚本使用。

  • bdist_mpkg现在可以通过参数正确接受ReadMeLicenseWelcomebackground文件。

  • bdist_mpkg现在可以再次显示自定义背景(0.1.6破坏了此功能)。

  • bdist_mpkg现在接受build-base=参数,将构建文件放在备用位置。

  • py2app现在可以接受具有.pyw扩展名的主脚本。

  • py2app 的 not_stdlib_filter 现在将忽略 site-python 目录以及 site-packages

  • py2app 的插件包模板不再默认显示 GUI 对话框,但仍然链接到 AppKit

  • py2app 现在确保在扫描模块时,将主脚本的目录添加到 sys.path

  • py2app 的构建命令已被重构,使得通过子类化更易于更改其行为。

  • py2app 别名包现在可以处理那些执行原子保存(写入新文件,与现有文件交换名称)的编辑器。

  • macholib 现在对胖二进制文件有最小限度的支持。它仍然假设是大端模式,不会对小端模式的头文件进行任何更改。

  • 在用 install 命令而不是从软件包安装时,添加警告信息。

  • 新增一个简单的/结构化示例,展示了如何将组织在多个文件夹中的应用程序打包。

  • 新增 PyObjC/pbplugin Xcode 插件示例。

py2app 0.1.6

由于我偷懒了,上一次公告是 0.1.4,以下是 0.1.5 和 0.1.6 的软发布版本变更。

py2app 0.1.6 是一个主要功能增强的发布版本。

  • py2appletbdist_mpkg 脚本已移动到 Python 模块,以便功能可以与工具共享。

  • 来自 py2app 的通用图相关功能已移动到 altgraph.ObjectGraphaltgraph.GraphUtil

  • bdist_mpkg 现在输出更具体的 plist 要求(用于未来的兼容性)。

  • py2app 现在可以创建插件包(MH_BUNDLE)以及可执行文件。新增支持使用 sip 构建的扩展,如 PyQt。注意,由于 sip 的工作方式,当使用基于 sip 的扩展时,所有 基于 sip 的扩展都将包含在您的应用程序中。实际上,这意味着来自 Riverbank 提供的所有内容,我认为没有人公开使用 sip

  • 新增 PyOpenGL 的配方。这是一个非常原始的配方,简单地包括了整个库,而不是尝试修改其在 __init__ 中的脑死亡版本获取流程。

  • 引导程序现在设置了 ARGVZEROEXECUTABLEPATH 环境变量,对应于包看到的 argv[0]_NSGetExecutablePath(...)。这只有在您需要重新启动自己的应用程序时才真正有用。

  • 更正确的 dyld 搜索行为。

  • 重构 macholib 以使用 altgraph,现在可以生成 GraphViz 图,并进行更复杂的依赖分析。

  • 重构 macholib 以便于维护,并对结构处理进行了一些优化。

  • 将现有的几个测试重构为 py.test 风格。

  • 新增 PyQt 示例。

  • 新增 PyOpenGL 示例。

另请参阅

py2app 0.1.5

py2app 0.1.5 是一个主要功能增强的发布版本。

  • 增加了一个 bdist_mpkg distutils 扩展,用于从任何 distutils 脚本创建安装器和元包。

    • 包括 PackageInstaller 工具

    • bdist_mpkg 脚本

    • 为支持 bdist_mpkg 功能增强了 setup.py

  • 增加了一个 PackageInstaller 工具,一个执行与 bdist_mpkg 脚本相同功能的 droplet。

  • py2app 的 setup 脚本创建一个自定义的 bdist_mpkg 子类。

  • 源包现在包括 PJEsetuptools 扩展到 distutils。

  • 为 setup 脚本增加了大量元数据。

  • py2app.modulegraph 现在是一个顶级包,modulegraph

  • py2app.find_modules 现在是 modulegraph.find_modules

  • 现在应该可以正确处理包含 Unicode 字符的路径(和应用程序名称)。

  • 为 py2app 构建命令新增了 --strip 选项,用于移除输出应用程序包中的所有 Mach-O 文件。

  • 为 py2app 构建命令新增了 --bdist-base= 选项,允许指定备用构建目录。

  • 新增 docutils 配方。支持非框架 Python,如 DarwinPorts 提供的。

另请参阅

py2app 0.1.4

py2app 0.1.4 是一个小的错误修复版本

  • 0.1.3 中的 altgraph 存在一个非常严重的错误,阻止了过滤功能正常工作,所以我修复了这个错误,并升级到了 0.1.4。

py2app 0.1.3

py2app 0.1.3 是一个重构和新增功能版本

  • altgraph,我的 graphlib 分支,现在是发行版的一部分

  • py2app.modulegraph 已重构以使用 altgraph

  • py2app 现在可以使用 -g 选项创建 GraphViz DOT 图(例如 TinyTinyEdit 示例

  • 将过滤栈移动到 py2app.modulegraph

  • 修复了一个可能存在于 0.1.2 中的错误,其中显式包含的包不会被 macholib 扫描

  • py2app.apptemplate 现在包含一个精简的 site 模块,而不是 sitecustomize

  • 别名构建现在是唯一包含系统用户 site-packages 目录在 sys.path 中的构建

  • pydoc 配方已被加强,现在也可以排除 BaseHTTPServer 等。

已知问题

  • 帮助中标记为 XXX 的命令尚未实现

  • 包含所有包中的 所有 文件,它应该足够智能,可以删除未使用的 .py/.pyc/.pyo 文件(根据使用的优化标志来节省空间)

  • macholib 应该重构以使用 altgraph

  • py2app.build_apppy2app.modulegraph 应该重构以按应用程序搜索依赖项

py2app 0.1.2

py2app 0.2 主要是一个错误修复版本

  • 编码包现在包含在zip文件中(节省空间)

  • 不再将Python解释器包含在独立构建中(节省空间)

  • 默认情况下现在会移除可执行的自举程序(节省少量空间)

  • 现在正确设置sys.argv,它以前指向可执行文件,现在指向启动脚本。这应该会提高与某些应用程序的兼容性。

  • 向modulegraph添加了“别名”功能,以便处理如wxPython.wx -> wx这样的sys.modules混乱(这种混乱现在也默认处理)

  • 现在可以将sys.path的替代方案传递给find_modules,尽管目前尚未使用

  • 现在将Command实例传递给配方,而不是Distribution实例(尽管目前没有配方使用它们)

  • 现在将模块和扩展的后期过滤过程泛化为一个堆栈,并且配方可以修改它

  • 已添加了一个展示如何打包wxGladewxPython示例(这是一个编写您自己的配方以及如何处理混合代码和数据文件的大型应用程序的很好的示例)

  • PyRuntimeLocations现在设置为(仅)当前解释器的Python.framework的位置,用于别名和半独立构建模式(增强与使用未修补的Makefile构建的Mac OS X 10.3的Python 2.3.0扩展的兼容性)

已知问题

  • 包含包中的所有文件,它应该足够智能,可以删除未使用的.py/.pyc/.pyo文件(节省空间,取决于使用的优化标志)

py2app 0.1.1

py2app 0.1.1主要是一个错误修复版本

  • 已解决与Mac OS X 10.2兼容性和独立构建相关的一些问题

    和构建

  • 现在可以正常工作,这些脚本不在与setup.py相同的目录中

  • 已添加一个新的配方,用于删除pydoc -> Tkinter依赖项

  • py2app本身添加了一个配方

  • 已添加一个wxPython示例(superdoodle)。它不仅演示了(终于!)打包wxPython应用程序有多容易,而且还展示了如何一个setup.py可以处理py2exepy2app

  • 已添加一个新的实验性工具,py2applet。一旦构建它(当然,使用python setup.py py2app),你应该能够通过简单地拖动主脚本以及可选的任何包、数据文件、Info.plist和图标来构建简单的应用程序。

已知问题

  • 包含包中的所有文件,它应该足够智能,可以删除未使用的.py/.pyc/.pyo文件(节省空间,取决于使用的优化标志)

  • 默认的PyRuntimeLocations可能导致安装了/Library/Frameworks/Python.framework的机器出现问题。解决方案是设置一个包含以下键的plist:PyRuntimeLocations=['/System/Library/Frameworks/Python.framework/Versions/2.3/Python'](这将被很快解决)

py2app 0.1

(第一个公开版本)py2app是我们一直等待的bundlebuilder替代品。它作为distutils命令实现,类似于py2exe

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

py2app-0.28.8.tar.gz (1.2 MB 查看哈希值)

上传时间

构建分发

py2app-0.28.8-py2.py3-none-any.whl (835.7 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持