在启动交互式shell时导入

时间:2010-01-29 06:00:11

标签: python django shell import

当我通过manage.py启动交互式django shell时,执行

python -v manage.py shell

从项目目录中,我看到很多格式为django.package.module的模块在详细输出中导入但仍然需要导入它们才能在shell中使用它。

当我运行Python shell(使用-v参数)时也会发生同样的情况。例如,我在详细输出中看到了这一点,

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

但我仍然需要导入os来导入和使用os模块。在详细输出中看到的导入内容以及为什么我必须再次显式导入它们才能在shell中使用它们? Python在启动shell时是否加载了一些必要的模块,或者它是某种幕后魔术?

3 个答案:

答案 0 :(得分:1)

-v跟踪模块的第一次导入 - 实际加载模块的模块(执行其代码,因此可能需要一些时间)并将其粘贴到sys.modules

当然,当你的交互式会话(模块__main__)将模块注入其命名空间时, 可以做。确保模块'goo' 进入模块'X'的命名空间(对于任何 X,当然包括 __main__ ...在很多很多其他人中),模块'X'只需要import goo本身(如果sys.modules['goo']已经定义,确实是非常快速的操作! - 。)

答案 1 :(得分:0)

Python在启动时隐式加载site模块,这可能反过来导入其他模块供自己使用。您可以通过-S来禁用此行为。

答案 2 :(得分:0)

他们正在导入(查看sys.modules),并且在导入模块的任何模块中创建对模块的引用。

在shell中导入时,如果已导入模块,则只需在sys.modules中获取对它的引用的副本