импорт при запуске интерактивной оболочки - PullRequest
1 голос
/ 29 января 2010

Когда я запускаю интерактивную оболочку django через manage.py, выполняя

python -v manage.py shell

из каталога проекта, я вижу много модулей формата django.package.module, импортируемых в подробный вывод, но все же я должен импортировать их, чтобы использовать его в оболочке

То же самое происходит, когда я просто запускаю оболочку Python (с аргументом -v). Например, я вижу это в подробном выводе

import os # precompiled from /usr/local/gdp/lib/python2.4/os.pyc

но все же мне нужно сделать импорт ОС для импорта и использования модуля ОС. Что импортируется, что видно в подробном выводе, и почему я должен снова импортировать их явно, чтобы использовать их в оболочке? Загружает ли Python некоторые важные модули при запуске оболочки или это какая-то магия за сценой?

Ответы [ 3 ]

1 голос
/ 29 января 2010

-v отслеживает первый импорт модуля - тот, который на самом деле загружает модуль (выполняет его код, и, следовательно, может занять некоторое время) и придерживается это в sys.modules.

Это не имеет ничего , чтобы сделать, если ваш интерактивный сеанс (модуль __main__), конечно, вставит модуль в свое пространство имен. Чтобы убедиться, что модуль 'goo' действительно входит в пространство имен модуля 'X' (для любой X, поэтому, конечно, , включая __main__ .. ... среди многих, многих других) модуль 'X' просто нуждается в import goo сам по себе (очень быстрая операция, если sys.modules['goo'] уже определено! -).

0 голосов
/ 29 января 2010

Они импортируются (смотрите sys.modules), и ссылки на модуль создаются в зависимости от того, какие модули импортировали его.

Когда вы выполняете импорт в вашей оболочке, если модуль уже был импортирован, вы просто получите копию ссылки на него в sys.modules

0 голосов
/ 29 января 2010

Python неявно загружает модуль site при запуске, который, в свою очередь, может импортировать другие модули для собственного использования. Вы можете передать -S, чтобы отключить это поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...