2013-03-02 5 views
1

모듈을 가져올 때 우선 순위가 혼란스럽고이를 어떻게 바꿀 수 있습니까? 추가 패키지가져 오기 우선 순위 일관성?

l10n/__init__.py 
l10n/moneyfmt.py 

다른 디렉토리를 (다른 후 현재)를 포함 않습니다 :

/opt/l10n/__init__.py 
/opt/l10n/utils.py 

이제 실행 파이썬 대화 형 인터프리터 :

>>> import sys 
>>> sys.path 
['', '/usr/lib/python27.zip', '/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', 
'/usr/lib/python2.7/site-packages', '/usr/lib/python2.7/site-packages/PIL', 
'/usr/lib/python2.7/site-packages/gtk-2.0', 
'/usr/lib/python2.7/site-packages/setuptools-0.6c11.egg-info'] 
>>> import l10n.utils 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named utils # CORRECT, NOT IN PATH YET 
>>> sys.path.insert(0, '/opt') 
>>> sys.path 
['/opt', '', '/usr/lib/python27.zip', '/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', 
'/usr/lib/python2.7/site-packages', 
'/usr/lib/python2.7/site-packages/PIL', 
'/usr/lib/python2.7/site-packages/gtk-2.0', 
'/usr/lib/python2.7/site-packages/setuptools-0.6c11.egg-info'] 
>>> import l10n.utils 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named utils # WHY IT CAN NOT FIND THE MODULE? 

현재 디렉토리가 포함되어 있습니까 전체 팻치를 prepend 한 후에 l10n.utils 모듈로 패키지를 찾을 수없는 이유는 무엇입니까? h를 sys.path의 검색 경로에? 현재 디렉토리 이 항상이 우선입니까? 그것을 바꿀 수 있습니까?

답변

2

l10n이라는 모듈이 두 개 있습니다. 처음으로 import l10n.utils을 시도하면 잘못된 l10n이 경로에 있습니다. 이 잘못된 l10n 파이썬 셸에 의해 캐싱 점점 의심하고 변경 한 관계없이 두 번째로 import l10n.utils 시도 할 때 참조됩니다.

sys.path을 먼저 변경하고 import l10n.utils을 바로 실행하여 파이썬 쉘을 다시 시작하십시오.

+0

와우, 첫 번째 가져 오기 시도를 생략하면 제대로'l10n.utils' 모듈이로드됩니다! 가져 오기에 대한 캐싱과 관련된 설명서가 있습니까? 나중에 어떻게 든 지울 수 있습니까? –

+0

@DavidUnric : http://docs.python.org/2/reference/simple_stmts.html#the-import-statement 및 http://docs.python.org/2/library/sys.html#을 참조하십시오. sys.modules – NPE

+0

신속한 답변을 보내 주셔서 감사합니다. 아직도 조금 놀랄만 한 행동을 찾으십시오. –