21
A
回答
30
Python模块不会导入多次。只需运行两次导入不会重新加载模块。如果你想重新加载,你必须使用reload
声明。这里有一个演示
foo.py
与单线
print "I am being imported"
模块,这里是多个进口尝试的屏幕成绩单。
>>> import foo
Hello, I am being imported
>>> import foo # Will not print the statement
>>> reload(foo) # Will print it again
Hello, I am being imported
13
导入缓存,只能运行一次。其他导入只会花费sys.modules
中的查找时间。
9
在其他的答案中指定,的Python遇到第二个import语句它时,一般不重新加载的模块。相反,它会从sys.modules
返回其缓存版本,而不执行任何代码。
但是有几个陷阱值得注意:
导入主模块作为一个普通的模块有效地创建不同的名字在同一模块的两个实例。
这是因为程序启动期间the main module is set up with the name
__main__
。因此,将其作为普通模块导入时,Python在sys.modules
中未检测到它,并再次导入它,但第二次输入它的专有名称。考虑文件/tmp/a.py具有以下内容:
# /tmp/a.py import sys print "%s executing as %s, recognized as %s in sys.modules" % (__file__, __name__, sys.modules[__name__]) import b
另一个文件/tmp/b.py有a.py一个import语句(
import a
)。
执行/tmp/a.py结果如下输出:[email protected]:/tmp$ python a.py a.py executing as __main__, recognized as <module '__main__' from 'a.py'> in sys.modules /tmp/a.pyc executing as a, recognized as <module 'a' from '/tmp/a.pyc'> in sys.modules
因此,最好是保持主模块相当小,且大部分的功能输出到外部模块,如建议here 。
This answer指定两个可能的方案:
- 稍有不同的import语句使用不同的条目
sys.path
导致同一模块。 - 尝试在前一个模块中途失败后再次导入模块。
- 稍有不同的import语句使用不同的条目
相关问题
- 1. 如何防止导入模块“导入”sys.argv [1:]
- 2. Python模块:如何防止导入新模块调用的模块
- 3. 如何防止在Curses导航菜单中输入两次?
- 4. 导入时间模块两次
- 5. python模块是否被导入两次?
- 6. 如何防止鼻子检查像matplotlib导入模块?
- 7. 如何防止从我的模块导入功能?
- 8. 如何防止装饰者在TypeScript中导入节点模块?
- 9. IronPython - 如何防止导入CLR(和其他模块)
- 10. 如何在python2.7中防止导入(并获取模块,而不是模块)
- 11. 如何用webpack依次导入模块?
- 12. 导入模块多次
- 13. 如何防止依赖包括两次
- 14. 如何防止Datagridview CellValidating发射两次?
- 15. 如何防止SwiftSupport库两次
- 16. 如何防止程序加载两次?
- 17. 如何防止打开文件两次?
- 18. 如何防止div可见两次?
- 19. 什么可能导致python模块导入两次?
- 20. 如何防止模块复制与MEF?
- 21. 如何防止多次绘制模态?
- 22. 防止源加载两次
- 23. 防止Ajax调用两次
- 24. 如何防止将值推入数组两次? (jQuery)
- 25. 如何防止Python模式自动插入“导入”?
- 26. 如何导入模块?
- 27. 如何导入模块
- 28. 如何防止hbm2ddl导入init sqls?
- 29. 如何防止重复导入图像?
- 30. 导入导入主模块的模块
请注意,'重载()'不会修复了旧模块的任何引用,所以实际上不是那么有用。 – 2010-01-08 17:56:07
这是一个重要的观点。谢谢。 – 2010-01-08 18:01:01
参考资料:http://docs.python.org/tutorial/modules.html#more-on-modules。 http://docs.python.org/reference/simple_stmts.html#the-import-statement – 2010-01-08 20:39:30