是的,--enable-framework
在构建和安装 Python 时会有所不同。如果没有--enable-framework
,Python 将默认安装为传统的“unix 样式”构建,/usr/local/
但可以通过--prefix=
选项更改为./configure
. --enable-framework
构建一个默认安装到 的 Python /Library/Frameworks
,尽管可以通过指定另一个路径来更改--enable-framework
. 但是任何 Python 构建都将依赖于操作系统提供的其他库和框架。这个是正常的。你为什么担心它?
更新:只需安装另一个 Python 2.7 而不是使用 / usr/bin/python2.7。但这并不意味着您应该或可以避免使用其他系统框架。
也就是说,在 OS X 10.6 到 10.8 中,有一个已知的有问题的 Apple 提供的框架供 Python 使用:即 Tk 8.5,由包括 IDLE 在内的 Python Tkinter 应用程序使用。幸运的是,解决这个问题很容易。与 Python 一样,您可以将 Tcl 8.5 和 Tk 8.5 框架的更新的第三方版本安装到/Library/Frameworks
某些 Python 发行版中,例如来自 python.org 的二进制安装程序,将使用它们。如果您能够使用它,我们推荐使用 ActiveTcl 发行版。有关详细信息,请参阅http://www.python.org/download/mac/tcltk/。
另外,请注意,您需要为您拥有的每个Python 实例安装Distribute
(或setuptools
)、pip
(如果您使用它)和/或virtualenv
的单独版本。不要陷入使用 Apple 提供的用于系统 Python 的命令的陷阱。easy_install
/usr/bin/
进一步更新:随着进一步细化
避免 /S/L/F/Python.framework 下的所有东西”。我已经尝试过类似你描述的东西,但生成的安装仍然取决于 /S/L/F/Python.framework 下的东西
我所能做的就是重申构建自己的 Python,无论是“unix”构建、“共享”构建还是“框架”构建,生成的 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)"
如果您构建了 Python,我们需要查看完整的configure
和make
命令。但这将进入本地化调试,并不适合 StackOverflow。
最后(!)更新:在框架构建中,如果您--enable-framework=/path/to
坚持configure
使用以Library/Frameworks
. 所以,如果你使用:
./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
...
顶级 bin 目录有些退化,实际上只是混淆了问题。它包含指向框架bin
目录中可执行文件的符号链接。它是/usr/local/bin
由默认框架构建安装的。使用它的一个问题是,默认情况下,Distutils 安装的脚本将安装到框架bin
目录中,并且在顶级目录中不会有它们的别名。这就是为什么建议您将 frameworkbin
目录放在 shell 的头部PATH
而忽略顶层的bin
.
如果--prefix=/foo/bar
添加到前一个configure
,它将使用前缀路径作为残留顶级 bin 目录的根目录。在上面的示例中,该顶级bin
目录将安装在:
/foo
bar
bin
2to3 -> ...bin/2to3
...
idle2.7 -> ...bin/idle2.7
...
python -> ...bin/python
...
否则,它应该没有效果。