有没有办法构建和安装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
之间是否存在任何差异。)
答案 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
否则,它应该没有效果。