如何在OSX Lion下独立于/ System / Library / Frameworks安装Python 2.7.x?

时间:2013-02-24 22:30:51

标签: python osx-lion

有没有办法构建和安装Python 2.7.x,以便它与/ System / Library / Frameworks下的任何东西没有任何直接的依赖关系? (IOW,即使在sudo chmod 000 /System/Library/Frameworks之后,这样的Python应该仍然有效。)

我认为在运行--enable-framework时省略./configure标志就足够了,但我错了:如果我这样做,生成的Python仍然有很多依赖关系/ System / Library / Frameworks下的框架,当然包括/System/Library/Frameworks/Python.framework。 (IOW,我们不得不怀疑在安装和不选择--enable-framework之间是否存在任何差异。)

1 个答案:

答案 0 :(得分:3)

是的,--enable-framework在构建和安装Python时有所不同。如果没有--enable-framework,Python默认安装到/usr/local/时构建为传统的“unix样式”构建,但可以使用--prefix=选项更改为./configure--enable-framework构建了一个默认安装在/Library/Frameworks中的Python,尽管可以通过指定--enable-framework的另一条路径来更改。但任何Python构建都依赖于操作系统提供的其他库和框架。这个是正常的。你为什么关心它?

更新:很容易避免使用Apple提供的系统Pythons,例如:那些在/ usr / bin中的共享组件位于/System/Library/Frameworks/Python.frameworks中,只需安装另一个Python 2.7而不使用/usr/bin/python2.7。但这并不意味着您应该或可以避免使用其他系统框架。

也就是说,Python中使用的OS X 10.6到10.8中有一个已知问题的Apple提供的框架:即Tk 8.5,由Python Tkinter应用程序(包括IDLE)使用。幸运的是,解决这个问题非常容易。与Python一样,您可以将新的第三方版本的Tcl 8.5和Tk 8.5框架安装到/Library/Frameworks中,而某些Python发行版(如python.org的二进制安装程序)将使用它们。如果您能够使用它,我们建议使用ActiveTcl发行版。有关详细信息,请参阅http://www.python.org/download/mac/tcltk/

另请注意,您需要安装Distribute(或setuptools),pip(如果您使用)和/或virtualenv的单独版本您拥有的每个 Python实例。不要陷入使用easy_install中用于系统Pythons的Apple提供的/usr/bin/命令的陷阱。

进一步更新:进一步细化

  

避免使用/S/L/F/Python.framework下的所有内容。我已经尝试过了   类似你描述的东西,但结果安装仍然   取决于/S/L/F/Python.framework

下的内容

我所能做的就是重申构建自己的Python,无论是“unix”构建,“共享”构建还是“框架”构建,结果Python应完全独立于{{1}中的任何内容}。如果没有,那么构建或者你如何执行Python会出现问题。需要更多细节来确定出现了什么问题,至少应该是:

/System/Library/Frameworks/Python.framework

如果您构建了Python,我们需要查看完整的/path/to/your/python -c "import sys, pprint; print(sys.version); print(sys.executable); pprint.pprint(sys.path)" configure命令。但这将进入本地化调试并不适合StackOverflow。

Last(!)update:在框架构建中,make的{​​{1}}选项使用该“前缀”作为框架的安装“前缀”位置和两个辅助目录(如果您坚持使用)使用以--enable-framework=/path/to结尾的路径。所以,如果您使用:

configure

它应该导致:

Library/Frameworks

顶级bin目录有些遗留,实际上只是让人感到困惑。它包含框架./configure --enable-framework=/baz/quux/Library/Frameworks && make && make install 目录中可执行文件的符号链接。这是默认框架构建在/baz quux Applications Python 2.7 Build Applet.app IDLE.app ... Library Frameworks Python Version 2.7 Headers/ Python ... Resources/ bin ... 2to3 idle2.7 ... python python2 python2.7 ... include/ lib/ share/ bin 2to3 -> ...bin/2to3 ... idle2.7 -> ...bin/idle2.7 ... python -> ...bin/python ... 中安装的内容。使用它的一个问题是,默认情况下,Distutils安装的脚本将安装到框架bin目录,并且在顶级目录中不会有它们的别名。这就是为什么建议您将框架/usr/local/bin目录放在shell bin的头部并忽略顶级bin

如果将PATH添加到上一个bin,它将使用前缀路径作为残留顶级bin目录的根目录。在上面的示例中,该顶级--prefix=/foo/bar目录将安装在:

configure

否则,它应该没有效果。