我的目录结构是:
./
├── 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'])
将导致失败并且不是包解决方案。这似乎是一个我无法弄清楚的导入路径问题。
答案 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()