3

我有两个 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导入是绝对的,而不是本地的?换句话说,为什么我看不到系统日志记录模块?

4

1 回答 1

3

问题原来是imp.load_source命令。第一个参数是它注册模块的名称,后续导入将首先在加载的模块中查找,然后再查找路径。更改该行以使用不同的名称,例如:

logging = imp.load_source('logx', '/code/y/logging.py')

...解决问题。

于 2011-02-01T18:02:07.683 回答