Mac OS X上的Python构建和非框架构建(即标准UNIX构建)之间有什么区别?另外,每个的优点和缺点是什么?
以下是我在发布此问题之前发现的信息:
在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框架的差异和优缺点的问题。
答案 0 :(得分:13)
您已经列出了制作框架的所有重要优势(祝贺优秀的研究和报告!);唯一的另一面是,你很难安排正确地构建一个,但是如果你从你引用的安装程序中的示例中获取线索,它应该是可行的。
顺便说一下,Snow Leopard附带的系统Python出了什么问题?我还没有从Leopard升级(长篇大论......我确实有“家庭许可证”升级DVD,但在升级之前需要Snow Leopard修复一些东西),所以我还没有第一手经验,但我知道它是一个2.6版本,它有32位和64位版本......所以为什么你需要构建自己的框架?答案 1 :(得分:4)
还有另一个不同之处:安装程序从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。虽然即使对于python的非框架版本也可以安装sip和PyQt,但它要复杂得多。
至于决定更喜欢什么,我还是不知道。目前,我选择了非框架选项,但我必须说,这也让我头疼。
答案 2 :(得分:1)
如果您要发送代码(让它在另一台机器上运行),您最好使用python的系统版本,否则您的程序行为将在其他机器上未定义。
答案 3 :(得分:0)
我在10.6上使用Macports,这使得安装python的多个版本并在它们和Apple的版本之间切换变得非常简单:
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
答案 4 :(得分:0)
框架构建在安装时由“root”帐户拥有。源构建将由安装它的帐户拥有。拥有Python安装的优点(和缺点)是您不需要更改帐户来修改它。
一个小的区别是Framework构建是针对EditLine库构建的。源构建通常是针对Readline库编译的。根据Python编译的库,标准库中的readline模块的工作方式略有不同。有关详细信息,请参阅Mac OS X上的“man python”。
有一个很好的构建可以自动从Mac OS X上的源代码编译Python 2.4,2.5和2.6,即explained here。这将针对自定义构建的readline进行编译。但是,编写源安装脚本的有用之处在于,您可以对自定义Python构建进行额外的调整,例如:安装必要的发行版,如virtualenv,或更难安装PIL等发行版。