我尝试做类似的事情:Load module from string in python
有时我会阅读用户提供的源代码:
module = imp.new_module('AppModule')
exec_(s, module.__dict__)
sys.modules['AppModule'] = module
return module
有时从文件中导入
module = __import__(module_name, fromlist=_fromlist)
return module
这些模块被加载到地图对象中,并且它将在IDE中使用。
我的问题是:如果在if __name__ == '__main__':
之外有任何方法调用,则此代码正在执行,并且可以与IDE交互。
如何导入模块而无法执行方法?
答案 0 :(得分:1)
导入模块的过程需要执行其代码。解释器创建一个新的命名空间,并通过执行模块的代码并使用新的命名空间作为全局命名空间来填充它,之后您可以访问这些值(请记住def
和class
语句是可执行的)。
所以也许您必须教育您的用户不要编写与IDE交互的模块?