我已经在这里找到了几个不同的answers和相关问题,但我仍然无法弄清楚我做错了什么。
我有一个python应用程序,其布局如下:
main.py
sources/
__init__.py
utils.py
我的__init__.py
包含:
from sources.utils import show
其中 show 是 utils 中定义的函数
我希望能够在main.py中编写:
from sources import show
show()
但我收到错误ImportError: cannot import name 'show'
非常感谢任何帮助
编辑:
似乎问题是由我使用的PyCharm IDE引起的。直接从linux控制台在python中运行的相同代码就像charm一样。
很抱歉打扰你们,谢谢你的帮助。
最诚挚的问候, 最大
答案 0 :(得分:2)
Python 2.x,导入是隐式相对的。例如,如果您正在编辑文件
foo/__init__.py
并想要在foo/bar.py
导入模块,则可以使用import bar
。在Python 3.0中,这不起作用,因为默认情况下所有导入都是绝对的。你应该使用
from foo import bar
;如果要从bar导入特定函数或变量,可以使用相对导入,例如from .bar import myfunction
)
使用__init__.py
(from sources.util import show
)中的绝对导入 - 或显式相对导入(from .util import show
)。
鉴于此设置:
sh$ cat sources/utils.py
def show():
print("show")
sh$ cat sources/__init__.py
from sources.utils import show
# could be
# from .utils import show
sh$ cat main.py
from sources import show
show()
它将在Python 2& 3:
sh$ python2 main.py
show
sh$ python3 main.py
show
答案 1 :(得分:0)
试试这个:
__init__.py
import utils
show = utils.show
main.py
from sources import show
show()
答案 2 :(得分:0)
如评论所示......
将__init__.py
更改为
from utils import show