2013-05-11 4 views

답변

3

모듈을 사용하는 모듈에서 모듈을 가져옵니다.

__init__.pyimport os을 배치하면 패키지의 글로벌 네임 스페이스에 os을 둘 것입니다,하지만 os을 사용하는 모듈의 네임 스페이스에 영향을주지 않습니다. 전역 네임 스페이스는 모듈이나 패키지에서 공유되지 않으므로 os을 사용하는 모듈에서 가져 오지 않은 경우 NameError을 가져옵니다.

+0

'import os'를'__init __. py '에 넣는 것은'from my_awesome_package import * '를하는 모든 모듈에 영향을 미칠 것입니다. 왜냐하면 이제 네임 스페이스에'os' 모듈이 가능한 함수 나 전역 변수에 예기치 않게 영향을 미치기 때문입니다. '*'를 사용하는 것은 눈살을 찌푸리게합니다. 충분한 사람들은 여전히 ​​그것을 사용하고 꾸러미 제작자는 그것도 배려해야합니다. –

+0

@ sigmavirus24 : 많은 모듈과 패키지는'from xxx import *'코딩 스타일을 지원하도록 특별히 설계되었습니다. '__all__'이라는 이름의 모듈 또는 패키지 수준의 변수를 정의합니다.이 변수에는 정의 된 항목의 문자열이 들어 있습니다 (언급되지 않은 항목 제외). '__init_.py' 파일에서 자주 생성되는 패키지. – martineau

+0

@martineau 잘 알고 있습니다. OP는 저것을 언급하는 것 외에 다른 것을 언급하지 않고 거기에 넣는 것에 대해 물었습니다. –

관련 문제