2014-10-04 4 views
2

파이썬 2.7의 sys.path에서 경로의 우선 순위를 어떻게 바꿀 수 있습니까? 나는 PYTHONPATH 환경 변수를 사용할 수 있다는 것을 알고 있지만, 내가 얻을 것이다 무엇 :파이썬 sys.path의 우선 순위 변경

$ PYTHONPATH=/tmp python 
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> for i in sys.path: 
... print i 
... 

/usr/local/lib/python2.7/dist-packages/pycuda-2014.1-py2.7-linux-x86_64.egg 
/usr/local/lib/python2.7/dist-packages/pytest-2.6.2-py2.7.egg 
/usr/local/lib/python2.7/dist-packages/pytools-2014.3-py2.7.egg 
/usr/local/lib/python2.7/dist-packages/py-1.4.24-py2.7.egg 
/usr/lib/python2.7/dist-packages 
/tmp 
/usr/lib/python2.7 
/usr/lib/python2.7/plat-x86_64-linux-gnu 
/usr/lib/python2.7/lib-tk 
/usr/lib/python2.7/lib-old 
/usr/lib/python2.7/lib-dynload 
/usr/local/lib/python2.7/dist-packages 
/usr/lib/python2.7/dist-packages/PILcompat 
/usr/lib/python2.7/dist-packages/gtk-2.0 
/usr/lib/python2.7/dist-packages/ubuntu-sso-client 
>>> 

/tmp/usr/lib/python2.7/dist-packages/usr/lib/python2.7 사이에 추가됩니다.

제 목표는 파이썬을 /usr/local/lib/python2.7/dist-packages부터 패키지를로드하도록 만드는 것입니다.

$ python 
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import numpy as np 
>>> np.version 
<module 'numpy.version' from '/usr/local/lib/python2.7/dist-packages/numpy/version.pyc'> 
>>> 

내가 apt-get install python-numpy에 의해 python-numpy을 설치하는 경우 : 여기

제가 원하는 것입니다. 파이썬은 /usr/lib/python2.7에서로드하려고 시도하지만 컴파일하지 않습니다.

+0

python *을 제공 한 결과에서'/ usr/local'의 모듈이'/ usr/lib'에있는 모듈보다 먼저로드되기 때문에 문제가 어디 있습니까? – Bakuriu

+0

sys.path 변수를 편집하여 간단하게 시도 했습니까? –

+0

@Bakuriu no. 내가 해결책을 묻는이 결과를 얻으려면 "apt-get python-numpy를 제거하여"설치된 numpy를 제거합니다. – wonghang

답변

6

아시다시피, sys.path is initialized from :

  • 현재 디렉토리
  • 당신의 PYTHONPATH
  • 설치에 의존하는 디폴트

그러나 불행하게도 그 이야기의 일부는 다음과 같습니다 setuptoolseasy-install.pth 파일을 생성합니다. 또한 sys.path과 그 중 최악의 파일을 수정합니다. 패키지를 앞에두고 디렉토리 순서를 완전히 엉망으로 만듭니다. (적어도 내 시스템) 특히

는 다음 내용을 /usr/local/lib/python2.7/dist-packages/easy-install.pth가 :

import sys; sys.__plen = len(sys.path) 
/usr/lib/python2.7/dist-packages 
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new) 

PYTHONPATH 전에, 심지어 앞에 추가로 /usr/lib/python2.7/dist-packages의 원인!

당신이 단순히

/usr/local/lib/python2.7/dist-packages 

에이 파일의 두번째 행을 다음과 같이 변경됩니다 할 수있는 당신이 원하는 우선 순위를 얻을 것이다.

그러나이 파일은 향후 setuptools 호출에 의해 덮어 쓰거나 변경 될 수 있습니다!

관련 문제