IPython导入本地文件
我遇到了一个奇怪的情况,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
时,它会检查这个模块是否已经被导入,不管路径是什么,所以就不会再做任何事情。