簡體   English   中英

如何在OSX Lion下獨立於/ System / Library / Frameworks安裝Python 2.7.x?

[英]How to install Python 2.7.x independently of /System/Library/Frameworks under OSX Lion?

有沒有辦法構建和安裝Python 2.7.x,以便它與/ System / Library / Frameworks下的任何東西沒有任何直接的依賴關系? (IOW,即使在sudo chmod 000 /System/Library/Frameworks之后,這樣的Python仍應保持功能。)

我認為在運行./configure時省略--enable-framework標志就足夠了,但我錯了:如果我這樣做,生成的Python仍然有很多依賴於/ System / Library / Frameworks下的框架當然包括/System/Library/Frameworks/Python.framework。 (IOW,人們不禁要問,安裝有沒有選擇--enable-framework之間是否有任何區別。)

是的, - --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 /斌/ 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/

另外,請注意,您需要為每個 Python實例安裝Distribute (或setuptools ), pip (如果使用它)和/或virtualenv單獨版本。 不要陷入使用Apple提供的/usr/bin/中用於系統Pythons的easy_install命令的陷阱。

進一步更新:隨着進一步細化

避免使用/S/L/F/Python.framework下的所有內容。我已經嘗試了類似你所描述的內容,但最終的安裝仍然取決於/S/L/F/Python.framework下的內容

我能做的就是重申構建自己的Python,無論是“unix”構建,“共享”構建還是“框架”構建,結果Python應完全獨立於/System/Library/Frameworks/Python.framework的任何內容/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。

最后(!)更新:在框架構建中, configure使用--enable-framework=/path/to選項將“前綴”用作框架的安裝“前綴”位置,如果堅持使用路徑則使用兩個輔助目錄在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目錄,並且在頂級目錄中不會有它們的別名。 這就是為什么建議您將框架bin目錄放在shell PATH的頭部並忽略頂級bin

如果將--prefix=/foo/bar添加到先前的configure ,它將使用前綴路徑作為殘留頂級bin目錄的根。 在上面的示例中,將安裝頂級bin目錄,而不是:

/foo
    bar
        bin
            2to3 -> ...bin/2to3
            ...
            idle2.7 -> ...bin/idle2.7
            ...
            python -> ...bin/python
            ...

否則,它應該沒有效果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM