2

/ System / Library / Frameworksの下にあるものに直接依存しないように、Python 2.7.xをビルドしてインストールする方法はありますか?(IOW、そのようなPythonは、その後も機能し続けるはずですsudo chmod 000 /System/Library/Frameworks。)

--enable-framework実行時にフラグを省略するだけで十分だと思いましたが./configure、間違っていました。これを行うと、結果のPythonには、もちろん/Systemを含む/System / Library/Frameworksの下のフレームワークへの依存関係がたくさんあります。 /Library/Frameworks/Python.framework。(IOW、選択した場合と選択しない場合のインストールに違いがあるかどうか疑問に思う必要があり--enable-frameworkます。)

4

1 に答える 1

3

はい、--enable-frameworkPythonをビルドしてインストールするときに違いがあります。がない--enable-framework場合、Pythonはデフォルトでにインストールされる従来の「unixスタイル」ビルドとしてビルドされますが、オプションを/usr/local/使用して変更できます。 に別のパスを指定することで変更できますが、デフォルトでにインストールされるPythonをビルドします。ただし、Pythonビルドは、オペレーティングシステムによって提供される他のライブラリとフレームワークに依存します。これは正常です。なぜあなたはそれを心配していますか?--prefix=./configure--enable-framework/Library/Frameworks--enable-framework

更新:Appleが提供するシステムPythonの使用を避けるのは簡単です。たとえば、/ usr / binにあり、共有コンポーネントが/System/Library/Frameworks/Python.frameworksにあるものは、別のPython 2.7をインストールし、/を使用しないだけです。 usr / bin/python2.7。しかし、それは、他のシステムフレームワークの使用を避けるべきである、または避けることができるという意味ではありません。

とは言うものの、Pythonで使用されるOS X 10.6から10.8には、問題のあるApple提供のフレームワークが1つあります。それは、IDLEを含むPythonTkinterアプリケーションで使用されるTk8.5です。幸い、それを回避するのは非常に簡単です。Pythonと同様に、Tcl8.5およびTk8.5フレームワークの新しいサードパーティバージョンをにインストールでき/Library/Frameworks、python.orgのバイナリインストーラーなどの一部のPythonディストリビューションがそれらを使用します。使用できる場合は、ActiveTclディストリビューションをお勧めします。詳細については、 http://www.python.org/download/mac/tcltk/を参照してください。

Distributeまた、 (またはsetuptools)、pip(使用する場合)、および/または使用しているPythonのインスタンスvirtualenvごとに個別のバージョンをインストールする必要があることに注意してください。システムPython用のApple提供のコマンドを使用するという罠にはまらないでください。easy_install/usr/bin/

さらなる更新:さらなる改良

/S/L/F/Python.frameworkの下にあるものはすべて避けてください。私はすでにあなたが説明したようなものを試しましたが、結果のインストールはまだ/S/L/F/Python.frameworkの下にあるものに依存します

私にできることは、「unix」ビルド、「shared」ビルド、「framework」ビルドなど、独自のPythonをビルドすることを繰り返すことです。結果として得られる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にはあまり適切ではないローカライズされたデバッグに入ります。

最後の(!)更新:フレームワークビルドで、で終わるパスを使用することに固執する場合、フレームワークと2つの補助ディレクトリのインストール「プレフィックス」の場所としてその「プレフィックス」--enable-framework=/path/toを使用するオプション。したがって、使用した場合:configureLibrary/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、デフォルトのフレームワークビルドによってインストールされるものです。これを使用する際の問題の1つは、Distutilsがインストールしたスクリプトがデフォルトでフレームワークbinディレクトリにインストールされ、最上位ディレクトリにそれらのエイリアスがないことです。binそのため、フレームワークディレクトリをシェルの先頭に置きPATH、トップレベルを無視することをお勧めしますbin

--prefix=/foo/barが前に追加された場合configure、プレフィックスパスが痕跡の最上位binディレクトリのルートとして使用されます。上記の例では、その最上位binディレクトリは代わりに次の場所にインストールされます。

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

それ以外の場合は、効果がありません。

于 2013-02-24T22:38:07.703 に答える