2010-01-29 2 views
1
프로젝트 디렉토리에서 을 실행하여 manage.py를 통해 대화 형 장고 셸을 시작하면 장황한 출력에 가져온 django.package.module 형식의 많은 모듈이 표시되지만 여전히 볼 수 있습니다. 쉘에서 사용할 수 있도록 가져 오기. 파이썬 셸 (-v 인수 사용)을 실행할 때도 마찬가지입니다. 예를 들어, 자세한 출력에서 ​​이것을 볼 수 있지만 여전히 import os를 가져 와서 os 모듈을 사용해야합니다. 왜 장황한 출력물을 보면서 수입하고 있으며 쉘에서 사용하기 위해 다시 명시 적으로 가져와야하는 이유는 무엇입니까? 파이썬은 셸을 시작하는 동안 몇 가지 필수 모듈을로드합니까? 아니면 장면 뒤에 숨겨진 마술입니까?

답변

1

-v는 모듈의 가져 오기를 추적 - 실제로 이 모듈을에로드 (코드를 실행하기 때문에 약간의 시간이 걸릴 수 있음)하고 sys.modules에 붙입니다.

그건 이 없습니다. 대화 형 세션 (모듈 __main__)이 해당 이름 공간에 모듈을 주입하는지 여부는 물론 없습니다. 모듈 'goo'를 확인하려면, 모듈 'X' 그냥 import goo 자체 (매우 빠른 동작으로 필요 (많은, 많은 다른 사람의 사이에서__main__을 ... 포함한 물론 의 있도록 어떤X에 대한) 모듈 'X'의 네임 스페이스에 들어가 않습니다 실제로 sys.modules['goo']이 이미 정의 된 경우! -).

+0

그래서 -v는 모듈을 sys.modules에 추가하고 현재 모듈 네임 스페이스에서 사용할 수 있도록 모듈 범위에서 가져와야합니다. 고마워, 고마워. – Parthan

0

파이썬은 시작시 암시 적으로 site 모듈을로드하므로 다른 모듈을 자체적으로 가져올 수 있습니다. 이 동작을 사용하지 않으려면 -S을 전달할 수 있습니다.

0

가져 오기 (sys.modules 살펴보기)되고 모듈에 대한 참조가 가져온 모듈에서 생성됩니다.

당신이 당신의 쉘에서 가져 오기를 수행 할 때 모듈이 이미 반입 된 경우, 당신은 단지 sys.modules에에에 대한 참조의 사본을 얻을 것이다

관련 문제