2014-09-11 5 views
3

OS X 10.9.4를 실행하는 Mac 랩톱에 Apple에서 설치 한 Python 2.7.5 배포본을 사용하고 있습니다.pip 및 .tar.gz 소스가없는 동안 easy_install이 Python 모듈로드 경로를 올바르게 수정하는 이유는 무엇입니까?

이 배포판은 numpy과 같이 널리 사용되는 여러 가지 Python 애드온 패키지의 "초기로드"버전과 함께 제공되며 그 중 다수는 /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python 디렉토리에 있습니다.

Apple 공장에서 설치 한 업데이트 유틸리티 인 /usr/bin/easy_install을 사용해야 만 미리로드 된 패키지의 버전 번호를 업데이트 할 수 있습니다. 대신 pip를 사용하여 업데이트하거나 python setup.py install을 사용하여 .tar.gz 소스에서 직접 업데이트하려고하면 설치가 매우 특별하게 실패합니다. 이에 대해서는 아래에서 자세히 설명합니다. 이 문제를 해결하고 싶습니다. 파이썬 패키지를 내가 원하는 어떤 방법 으로든 업데이트 할 수 있습니다.

첫째, 나는 "올바른"행동이라고 믿는에 대한 설명 : 다음

$> ls -l /Library/Python/2.7/site-packages | grep numpy 
drwxr-xr-x 4 root wheel  136 Sep 11 10:21 numpy-1.9.0-py2.7-macosx-10.9-intel.egg 

과 : 나는 easy_install을 사용하여 NumPy와 업데이트, 그것은 예를 들어, /Library/Python/2.7/site-packages에서, 새로운 서브 디렉토리, numpy-1.9.0-py2.7-macosx-10.9-intel.egg를 생성 easy_install 유틸리티는 또한 파이썬 모듈로드 경로를 수정하여 "새로운"numpy 설치가 공장 기본 버전보다 우선합니다; 예를 들어이 파이썬에서, 그것은 다음과 같습니다 : 나는 sudo pip uninstall numpy를 사용하여 예를 들어, NumPy와를 제거하면

In [1]: from pprint import pprint 

In [2]: import sys 

In [3]: pprint(sys.path) 
['', 
'/usr/local/bin', 
'/Library/Python/2.7/site-packages/PyVCF-0.6.7-py2.7-macosx-10.9-intel.egg', 
'/Library/Python/2.7/site-packages/distribute-0.7.3-py2.7.egg', 
'/Library/Python/2.7/site-packages/setuptools-3.3-py2.7.egg', 
'/Library/Python/2.7/site-packages/PyYAML-3.11-py2.7-macosx-10.9-intel.egg', 
'/Library/Python/2.7/site-packages/wheel-0.24.0-py2.7.egg', 
'/Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg', 
'/Library/Python/2.7/site-packages/numpy-1.9.0-py2.7-macosx-10.9-intel.egg', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC', 
'/Library/Python/2.7/site-packages', 
'/Library/Python/2.7/site-packages/IPython/extensions', 
'/Users/stachyra/.ipython'] 

In [4]: import numpy 

In [5]: numpy.__file__ 
Out[5]: '/Library/Python/2.7/site-packages/numpy-1.9.0-py2.7-macosx-10.9-intel.egg/numpy/__init__.pyc' 

In [6]: numpy.__version__ 
Out[6]: '1.9.0' 

, 그것은에서 삭제되는 NumPy와 결과 (사실 easy_install을 가진 제거 작업을 수행하는 방법을 알아낼 수) /Library/Python/2.7/site-packages, 공장 출하시 설치된 "기본"버전은 /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python입니다.

"잘못된"설치 동작을 관찰하기 위해 공장 출하 버전의 numpy를 이번에는 sudo pip install -U numpy을 사용하여 다시 업그레이드 할 수 있습니다. , I를 NumPy와로드하고 버전 번호를보고 NumPy와 신청을 한 후 그러나

$> ls -l /Library/Python/2.7/site-packages | grep numpy 
drwxr-xr-x 35 root wheel 1190 Sep 11 10:24 numpy 
drwxr-xr-x 8 root wheel  272 Sep 11 10:24 numpy-1.9.0.dist-info 

, 내가 파이썬에서 부하 경로에서보고,이는 /Library/Python/2.7/site-packages에서 생성되는 디렉토리의 새로운 쌍, 예를 들면 리드 (당신이 볼 수 있듯이 핍은 새로 업데이트 된 NumPy와 버전으로의 sys.path 변수를 업데이트하지 못하는 것처럼

In [1]: from pprint import pprint 

In [2]: import sys 

In [3]: pprint(sys.path) 
['', 
'/usr/local/bin', 
'/Library/Python/2.7/site-packages/PyVCF-0.6.7-py2.7-macosx-10.9-intel.egg', 
'/Library/Python/2.7/site-packages/distribute-0.7.3-py2.7.egg', 
'/Library/Python/2.7/site-packages/setuptools-3.3-py2.7.egg', 
'/Library/Python/2.7/site-packages/PyYAML-3.11-py2.7-macosx-10.9-intel.egg', 
'/Library/Python/2.7/site-packages/wheel-0.24.0-py2.7.egg', 
'/Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC', 
'/Library/Python/2.7/site-packages', 
'/Library/Python/2.7/site-packages/IPython/extensions', 
'/Users/stachyra/.ipython'] 

In [4]: import numpy 

In [5]: numpy.__file__ 
Out[5]: '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/__init__.pyc' 

In [6]: numpy.__version__ 
Out[6]: '1.6.2' 

위를 기반으로, 그것은 대신 최신 하나가 나타납니다 : 다음과 같은 결과를 얻을 수 numpy 1.9.0)가로드되는 경우, 파이썬은 대신 공장 출하시 기본 버전 인 1.6.2를로드합니다.

위의 두 가지 방법 외에도 sudo python setup.py install을 사용하여 sourceforge .tar.gz 파일에서 직접 numpy를 설치할 수 있습니다.이 경우 pip를 사용할 때와 매우 유사한 결과를 얻습니다.

제 질문은 우선 무엇이 정확하게 여기에서 부러 졌습니까? 일반적인 기본 (/Library/Python/2.7/site-packages) 외에도 미리로드 된 Python 패키지를 다른 비표준 디렉토리 영역 (/System/Library/Frameworks/Python.framework/Versions/2.7)에 설치 한 Apple의 기본 파이썬 버전입니까? 또는 Apple 공장 기본 설치를 제대로 무시하지 못해서 pip와 .tar.gz 소스 파일입니까?

또한 내 질문의 두 번째 부분 : 어떻게하면이 문제를 해결할 수 있습니다. 그래서 내가 원하는 경우 나중에 핍 및 .tar.gz를 사용할 수 있습니까?그리고 FWIW, Apple 공장 기본값을 제거하는 것이 포함 된 답이 나온다면 /System/Library/Frameworks 디렉토리에 들어가서 물건을 수동으로 삭제하기를 원하지 않을 것입니다. 이는 물건을 깨뜨릴 수있는 잠재적 제조법처럼 보입니다.

한가지 더 : 나는, 그러나 문제를 해결하기 위해 나에게 더 깨끗하고 우아한 것, 아마 단순히 Anaconda 또는 Enthought Canopy 등 다른 대안 분포를 사용하여이 모든 문제를 회피 할 수 있음을 알고 있어요 "제대로" 가능하다면.

답변

1

easy_install은 설치된 항목을 sys.path 앞에 삽입하기 위해 sys.path를 munged 반면 pip는 Python이 기본적으로 찾는 디렉토리 (site-packages)에 배치합니다. 파이썬 소스가 site-packages 디렉토리 앞에 자신 만의 미리 설치된 프로젝트를 삽입해야하는 것처럼 Python을 수정하지 않는 한 거의 항상 작동합니다.

핍에 대한 open issue이 있지만이 문제에 대한 해결책이 떠오르지 만 근본적으로 문제는 Apple이 기본 sys.path 순서를 위반했기 때문입니다.