2013-08-30 3 views
4

사람이 파이썬 인터프리터에서이 동작에 도움이 되거 시겠어요 뉘앙스 :파이썬 가져 오기

from os import path # success 
type(path)    # <class 'module'> 
from path import *  # complains that no module called 'path' exists 

type(os.path)   # complains that the name 'os' is not defined, yet: 
from os.path import * # works just fine 

사이드 질문으로, 나는 같은 문을 수있는 메커니즘이 무엇인지 궁금해 'OS 수입 경로에서 '일하고, 아직 OS는 정의되지 않은 상태입니까? os는 from ... import의 시점에 실행되지 않으며 모듈과 같은 "알려진"것이어야합니까? 내가 알고있는 이름에서 os를 지키는 것이 단순히 ('import os'에서처럼) 직접 가져 오지 않은 기호로 네임 스페이스의 "분류"를 방지하기위한 단순한 규칙 일 뿐이라고 말하는 것이 맞습니까?

답변

3

이것은 파이썬 3에만 국한되지 않습니다. 파이썬 2에서도 같은 문제가 발생합니다. 이름을 가져 오면 이름 공간에 아무 것도 추가되지 않습니다.

이 줄 :

from path import * 

수단 :

" PYTHONPATH에 임의의 디렉토리에 path라는 모듈을 찾아보십시오, 현재에 모든 이름을 가져 오려고 네임 스페이스. "

PYTHONPATH에서의 임의의 디렉토리에 더 중요한 것은 없다 현재 작업 디렉토리에 이러한 모듈이없고, 때문에, 가져 오기가 실패합니다. 참고 검색 하위 디렉터리PYTHONPATH있는 모든 디렉터리를 검색하지 않습니다. (그 가져 오지 이후)에 이름 os 현재 네임 스페이스가 없기 때문에

type(os.path) 

이 줄은 실패합니다.

은 아직 여전히 운영 체제가 정의되지 않은 상태에서, 같은 ' OS 수입 경로에서'일하기로 문을 수있는 메커니즘이 무엇인지 궁금해?

가져 오기를 수행하면 PYTHONPATH에 정의 된 경로 검색이 모듈을 검색합니다. 가져 오기 작업 방법에 대한 자세한 내용은 this article on effbot을 참조하십시오.

"정의되지 않음"은 단순히 네임 스페이스에 이름이 없음을 의미합니다.

OS는 ...에서 수입의 시간에 실행되지이며, 그것은 모듈로 "알려진"해야 같은?

아니, 당신은 from x import yyx하지 가져 수행 할 때.

오전 나는 잘 알려진 이름에서 운영 체제를 유지하는 것은 단순히 '수입 OS에서와 같이 (직접 수입되지 않은 기호 네임 스페이스의 "오염"을 방지하기 위해 의도 된 규칙이라고 대답 ')?

아니요. 사실이 아닙니다. 왜 그런지 이해하시기 바랍니다.

+0

고맙습니다. 잘못된 가정, 특히 이미 가져온 이름이 실제로 파일 시스템과 파일 시스템만을 다루는 대신 단순히 후속 가져 오기에 의해 "인식"될 것이라는 가정을하고있는 것 같습니다. 필자가 익숙한 표준 파이썬 문서는이 "수입 체인화"를 해결해야했지만 어떤 이유로 내 마음이 그 연결을 고집하고있었습니다. –

+0

철저히 말하자면, 'from import y'가 실행될 때, x _will_가 실행될 것입니다 (비록 import되지 않을지라도!). 참조 : http://stackoverflow.com/questions/10993156/python-importing-module. –