代码之家  ›  专栏  ›  技术社区  ›  Xanatos

将变量“预导入”到模块中

  •  1
  • Xanatos  · 技术社区  · 16 年前

    这里是Python初学者,如果这个问题有一个简单的答案,我很抱歉。(我希望如此。)

    我正在开发一个python模块——一个大型程序的插件。我正在尝试使用Eclipse IDE(和pydev)开发模块,这意味着我需要能够独立地运行这个模块,也就是说,不能作为大型程序的插件。

    实际上,我自己已经解决了很多棘手的细节,其中大部分涉及创建一种“工具”,从我的IDE启动插件,以模拟(从插件的角度)在其实际操作环境中启动插件。

    但有一件事我不知道。当模块在它的“真实”环境中运行时,它的dir()结果中已经定义了一个特定的名称(称为“bob”)。当我在自己的环境中运行它时,“bob”不会出现在dir()中,除非我手动加载它。

    当然,如果我编写代码来手动加载“bob”,这样插件就可以在我的IDE中工作,这会在插件运行“for real”时干扰插件。我需要帮助的是: 如何让我的插件启动(通过我的启动线束)与“鲍勃”已经加载?

    天真的是,我希望能够以某种方式“强制”插件以某种方式导入“bob”,而不必在插件本身添加“import bob”。但我愿意接受更好的建议…?

    1 回复  |  直到 16 年前
        1
  •  2
  •   Alex Martelli    16 年前

    大概,当您在Eclipse下“独立”运行它(或者在没有Eclipse的情况下“独立”运行它时,正如shell提示下的“python foobar.py”),您的模块 __name__ 全局变量的值为 '__main__' (如果模块被导入,则该全局变量的值将为 'foobar' --或者模块的名称)。

    所以,就这样

    if __name__ == '__main__':
        import Bob
    

    当模块独立运行时,可以导入Bob,而当模块 import 预计起飞时间。