框架和非框架之间的差异构建的Python在Mac OS X(Differences between

2019-07-18 11:50发布

什么是一个框架的构建和Python的Mac OS X上的非框架版本(即,标准的UNIX版本)之间的差异? 此外,什么是各自的优势和劣势?

初步研究

这里是之前发布这个问题,我找到的信息:

  • [Pythonmac-SIG]为什么是Python框架的构建需要
    • B.固安捷:“我好像记得是需要一个Python的框架构建,如果你想要做的原生Mac GUI什么是我的理解是否正确?”
    • C.巴克:“差不多 - 访问Mac的图形用户界面,应用程序需要在一个适当的Mac应用程序包的框架构建供应这一点。”
  • 苹果开发者:框架定义
    • “框架是包含与相关资源,如笔尖文件,图像文件和头文件。当你开发一个应用程序,你的项目链接到一个或多个框架沿着一个动态共享库捆绑(结构化目录)。对于例如,iPhone应用项目默认链接到基金会的UIKit和核心图形框架。您的代码访问,通过应用程序编程接口(API),它是由框架,通过它的头文件公布的框架的能力。因为磁带库是动态共享,多个应用程序可以同时访问框架代码和资源,系统加载框架的代码和资源到存储器中,根据需要,和共享的所有应用程序中的资源的一个拷贝“。
  • 框架编程指南:什么是框架?
    • “框架提供了优于静态链接库和其他类型的动态共享库的以下优点:
      • 相关框架组,但独立的,资源集中在一起。 这种分组可以更容易地安装,卸载,并找到这些资源。
      • 框架可以包括更广泛的资源类型比库。 例如,框架可以包括任何相关的头文件和文档。 框架的多个版本可以被包含在同一包。 这使得有可能是与旧程序的向后兼容。
      • 只有一个框架的只读资源拷贝物理驻留在内存中在任何给定的时间,无论有多少进程正在使用这些资源。 资源的这种共享降低了系统的内存占用量,有助于提高性能。”

背景

在此之前的Mac OS X 10.6雪豹,我没有太多考虑这个,因为我根本就下载和安装的Python 2.6.2 Mac安装磁盘映像 ,这是一个框架的构建,以及使用的virtualenv,PIP去我的生意等等。然而,随着64位,gcc等的变化雪豹,我注意到,已经让我想从源代码编译/编译Python的2.6.2+自己的一些问题,这使我对我达尔文框架|的差异和建立Python作为一个MacOSX的优势/劣势的问题。

Answer 1:

你已经列出制作框架的所有重要的优势(优秀研究的祝贺和其报告!); 唯一的另一面是,它很难安排建立一个正常的,但如果你从你引用的安装程序的例子来支持你的线索,应该是可行的。

顺便说一句,这有什么错自带的雪豹系统的Python? 我还没有从Leopard的升级,但(长的故事,我确实有“家庭牌”的升级DVD,但需要雪豹解决一些事情之前,我可以升级),所以我没有用第一手的经验,但,但我知道这是一个2.6构建和它有32位和64位版本的...那么,为什么你需要构建自己的框架?



Answer 2:

还有一个区别是:一般由安装在python.org上所提供的框架安装有多种结构。

$ 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)即当实际造成的问题(至少我认为,这是原因),病例。

而且还有另一种区别:有些工具需要Framework安装。 例如PyQt的,特别是SIP。 虽然可以安装SIP和PyQt的甚至蟒蛇的非框架版本,它要复杂得多。

至于什么喜欢的决定,我还是不知道。 此刻,我去无框架的选择,但我必须说,这也引起了我一些头痛。



Answer 3:

如果你要寄送您的代码(已到另一台机器上运行),你最好使用Python,否则你的程序的行为将在其他机器是不确定的系统版本。



Answer 4:

我使用的MacPorts的10.6,这使得它非常简单,安装他们和苹果版本之间有蟒蛇和交换机的多个版本:

sudo port install python26
sudo port install python_select
sudo python_select -l

最近python26的版本是2.6.2,并编译和运行在10.6.1罚款:trac.macports.org/browser/trunk/dports/lang/python26/Portfile



Answer 5:

框架构建安装时由“根”的账号。 源版本将通过安装它的帐户所有。 具有Python安装的所有权优势(劣势)是你不需要改变帐户进行修改。

一个小的区别是,框架版本是针对EditLine建库。 来源建立通常是对的Readline库编译。 取决于哪个库Python是一起编译,在标准库readline的模块工作方式略有不同。 请参见在Mac OS X“的人巨蟒”对更多细节。

有一个很好的扩建从Mac OS X上,这是源自动化的Python 2.4,2.5和2.6的编译这里解释 。 这将编译针对的readline的自定义生成。 然而,脚本源安装的用处就是可以进行其他调整到自定义的Python版本,如安装必要的分布,如virtualenv中,或难以安装分布如PIL。



文章来源: Differences between Framework and non-Framework builds of Python on Mac OS X