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

标签 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 之间是否有任何区别。)

最佳答案

是的,--enable-framework在构建和安装 Python 时会有所不同。没有 --enable-framework , Python 被构建为传统的“unix 风格”构建,默认安装到 /usr/local/但这可以通过 --prefix= 进行更改./configure 的选项. --enable-framework构建一个默认安装到 /Library/Frameworks 中的 Python。 , 虽然可以通过指定另一个路径来更改 --enable-framework .但是任何 Python 构建都将依赖于操作系统提供的其他库和框架。这是正常的。你为什么担心它?

更新:很容易避免使用 Apple 提供的系统 Python,例如那些位于/usr/bin 并且其共享组件位于/System/Library/Frameworks/Python.frameworks 的组件,只需安装另一个 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/想要查询更多的信息。

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

进一步更新:随着进一步细化

avoid all the stuff under /S/L/F/Python.framework". I already tried something like what you describe, but the resulting installation still depends on stuff under /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,我们需要查看完整的 configuremake命令。但这将进入本地化调试,并不适合 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 中的可执行文件的符号链接(symbolic link)。目录。这是安装在 /usr/local/bin 中的内容通过默认框架构建。使用它的一个问题是,Distutils 安装的脚本将默认安装到框架 bin。目录,并且在顶级目录中不会有它们的别名。这就是为什么建议你把框架 bin你的 shell 头部的目录 PATH并忽略顶层 bin .

如果 --prefix=/foo/bar添加到之前的configure ,它将使用前缀路径作为残留顶级 bin 目录的根目录。在上面的例子中,顶层 bin目录将安装在:
/foo
    bar
        bin
            2to3 -> ...bin/2to3
            ...
            idle2.7 -> ...bin/idle2.7
            ...
            python -> ...bin/python
            ...

否则,它应该没有效果。

关于python - 如何在 OSX Lion 下独立于/System/Library/Frameworks 安装 Python 2.7.x?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15057441/

相关文章:

python - 从多个词典创建一个 csv 文件?

python - Sqlalchemy mysql FLOAT精度和长度

java - 尝试在 OSX Lion 上安装 Maven 时出错

delphi - Gethomepath 不适用于 iOS 5/OSxLion

c++ - 运行时opencv(QT)中的空指针

python - 如何检查对象在列表理解中是否不是 None?

python - 使用将 77gb 文件读入内存以扫描关键字的 python 脚本,代码有效但我的计算机没有足够的内存

macos - postgresql 在 lion os x 上失败并出现以下错误

python sqlite3.connect - 无法打开数据库文件

java - 禁止在 Mac OSX Lion 中将 Jboss 5.1 作为应用程序启动