为什么这个绝对导入在Python中不起作用?
我有两个Python 2.6的文件,/code/x/X.py
:
import imp
print 'running'
logging = imp.load_source('logging', '/code/y/logging.py')
... 还有一个是/code/y/logging.py
:
from __future__ import absolute_import
import logging as _logging
import sys, os
print sys.path
print os.getcwd()
print _logging
运行X.py
时,输出是:
running
['/code/x', '/usr/lib/pymodules/python2.6', '/usr/lib/pymodules/python2.6/gtk-2.0', '/usr/lib/python2.6', '/usr/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/python2.6/dist-packages/gst-0.10', '/usr/lib/python2.6/dist-packages/gtk-2.0', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/plat-linux2', '/usr/local/lib/python2.6/dist-packages']
/code/x
<module 'logging' from '/code/y/logging.py'>
为什么from __future__ import absolute_import
没有强制让import logging
这个导入变成绝对导入,而不是局部导入呢?换句话说,我为什么看不到系统的日志模块?
1 个回答
3
问题出在 imp.load_source
这个命令上。它的第一个参数是给模块注册的名字,之后的导入操作会先在已经加载的模块里查找这个名字,如果找不到才会去其他路径里找。把这一行改成用一个不同的名字,比如:
logging = imp.load_source('logx', '/code/y/logging.py')
... 就能解决这个问题。