包使用__import__函数的python代码

时间:2014-12-17 11:51:55

标签: python python-2.7

我的目录结构是:

./
├── foo
│   ├── bar.py
│   ├── foo.py
│   └── __init__.py
└── main.py

使用:

bar.py:

def get_data():
    return 'ha'

foo.py:

class foo:
    def __init__(self):
        self.lib = __import__('bar', fromlist=['bar'])
        self.data = self.lib.get_data()

    def print_data(self):
        print(self.data)

if __name__=='__main__':
    f = foo()
    f.print_data()

__init__吡啶:

from foo import foo

和main.py:

from foo import foo

a = foo()
a.print_data()

正在运行python foo.py我正确地获得ha,但正在运行python main.py我收到以下消息:

Traceback (most recent call last):
  File "main.py", line 3, in <module>
    a = foo()
  File ".../foo/foo.py", line 3, in __init__
    self.lib = __import__('bar')
ImportError: No module named bar

我的要求是1)使foo像包一样工作,2)在__import__的{​​{1}}函数中使用foo.py而不是{{1}在__init__的第一行。

我将import的第3行更改为foo.py,然后得到了正确答案。但这不是我想要的,因为当整个目录foo.py成为另一个包时,运行self.lib = __import__('foo.bar', fromlist=['bar'])将导致失败并且不是包解决方案。这似乎是一个我无法弄清楚的导入路径问题。

1 个答案:

答案 0 :(得分:0)

foo.py更改为使其正常工作:

import importlib


class foo:
    def __init__(self):
        self.lib = importlib.import_module('foo.bar')
        self.data = self.lib.get_data()

    def print_data(self):
        print(self.data)

if __name__=='__main__':
    f = foo()
    f.print_data()