在Mac OS X上构建Python的框架

在Mac OS X上,Framework构建与Python的非构建(即标准UNIX构建)Python之间有什么区别? 另外,每个的优点和缺点是什么?

初步研究

以下是发布此问题之前发现的信息:

  • [Pythonmac-SIG]为什么需要Python的Framework构建
  • B. Grainger:“我似乎记得,如果你想用本地Mac GUI做任何事情,就需要Python的Framework构建,我的理解是否正确?”
  • C. Barker:“非常多 - 要访问Mac GUI,应用程序需要安装在适当的Mac应用程序包中。
  • Apple开发人员连接:框架定义
  • “框架是一个捆绑包(一个结构化目录),它包含一个动态共享库以及相关资源,例如nib文件,图像文件和头文件。开发应用程序时,项目链接到一个或多个框架。例如,iPhone应用程序项目默认链接到Foundation,UIKit和Core Graphics框架,您的代码通过应用程序编程接口(API)访问框架的功能,API由框架通过其头文件发布。是动态共享的,多个应用程序可以同时访问框架代码和资源。系统根据需要将框架的代码和资源加载到内存中,并在所有应用程序之间共享资源的一个副本。“
  • 框架编程指南:什么是框架?
  • “与静态链接库和其他类型的动态共享库相比,框架具有以下优点:
  • 框架将相关但独立的资源组合在一起。 这个分组使得安装,卸载和查找这些资源变得更加容易。
  • 框架可以包含比库更多的资源类型。 例如,一个框架可以包含任何相关的头文件和文档。 同一捆绑包中可以包含多个版本的框架。 这使得可以向后兼容较旧的程序。
  • 无论有多少进程正在使用这些资源,在任何给定时间,只有一个框架的只读资源副本在物理内存中驻留。 这种资源共享减少了系统的内存占用量,并有助于提高性能。“
  • 背景

    在Mac OS X 10.6 Snow Leopard之前,我对此并没有多少考虑,因为我只是简单地下载并安装Python 2.6.2 Mac Installer Disk Image,这是一个框架构建,并使用virtualenv,pip等等。然而,随着Snow Leopard到64位,gcc等的变化,我注意到一些问题让我想从源代码自己编译/编译Python 2.6.2+,这导致我到我的将Python构建为MacOSX | Darwin框架的差异和优势/劣势的问题。


    您已经列出了构建框架的所有重要优势(祝贺您进行了卓越的研究和报告!); 唯一不足的是安排正确构建一个问题更困难,但如果您从引用的安装程序中的示例中获取线索,则应该可行。

    顺便说一下,Snow Leopard附带的系统Python有什么问题? 我还没有从Leopard升级(长篇故事......我有“家庭执照”升级DVD,但是需要雪豹在升级之前修复一些东西),所以我还没有第一手的经验,但我确实知道这是一个2.6版本,它有32位和64位版本......所以你为什么需要构建自己的框架?


    还有一个区别:通常安装程序从python.org提供的Framework安装有几种体系结构。

    $ file libpython2.7.dylib

    libpython2.7.dylib: Mach-O universal binary with 2 architectures libpython2.7.dylib (for architecture i386): Mach-O dynamically linked shared library i386 libpython2.7.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64

    如果你从源代码安装,而不是故意改变它,你的libpython只有一个体系结构。 我曾遇到两种架构实际上导致问题的情况(至少我相信这是原因),即在安装HDF5 python绑定(h5py)时。

    还有一个区别:一些工具需要安装框架。 例如PyQt,特别是SIP。 虽然可以安装sip和PyQt,即使是非框架版本的python也是如此,它要复杂得多。

    至于决定选择什么,我仍然不知道。 此刻,我选择了非框架选项,但我必须说,这也让我感到头痛。


    如果你要发布你的代码(让它运行在另一台机器上),你最好使用系统版本的python,否则你的程序行为将在其他机器上未定义。

    链接地址: http://www.djcxy.com/p/76405.html

    上一篇: Framework builds of Python on Mac OS X

    下一篇: Is a string formatter that pulls variables from its calling scope bad practice?