IPython导入本地文件

4 投票
1 回答
988 浏览
提问于 2025-04-18 11:22

我遇到了一个奇怪的情况,IPython和默认的Python解释器在处理模块导入时表现得不一样。我有一个Python文件,它的名字和一个内置模块的名字相同,叫做logging.py。假设这个文件里有一个简单的方法foo()。

如果我启动默认的Python解释器,然后输入import logging,它会导入我本地的文件,这样我就可以使用logging.foo()了。

但是如果我启动IPython,输入import logging,它却导入了Python的内置模块。如果我把文件名改成一个不重复的名字(比如import my_logging),那么导入就会按预期工作。

那么,哪种行为是正常的呢?其实这两个解释器的当前目录都在sys.path的最前面,但它们在导入时的优先级却不一样。

1 个回答

2
import sys
print(sys.modules)

IPython一开始就会加载大部分标准库,包括日志记录功能。那些模块似乎是通过完整路径导入的。

推测:IPython已经为了内部使用通过完整路径导入了这些库,现在当你再次使用import logging时,它会检查这个模块是否已经被导入,不管路径是什么,所以就不会再做任何事情。

撰写回答