我在IPython和默认的python解释器之间遇到了一个奇怪的差异。我有一个python文件,它隐藏了内置模块的名称:logging.py。假设它有一个简单的方法foo()。
如果我启动默认的python解释器并调用import logging
,它会导入本地文件,我可以访问logging.foo()
。
如果我启动IPython并调用import logging
,它会导入python内置模块。如果我将名称更改为非阴影(例如import my_logging
),则导入将按预期工作。
预期的行为是什么?对于两个解释器,当前目录位于sys.path
的开头,但它们的优先级不同。
答案 0 :(得分:2)
import sys
print(sys.modules)
IPython从导入的大多数标准库开始,包括日志记录。这些模块似乎是通过完整路径导入的。
推测:IPython已经通过完整路径导入这些库以供内部使用,现在当你import logging
再次检查模块已经导入时,无论路径如何,并且什么都不做。