Python 将函数导入包级别
Python importing function to package level
我已经在这里找到了几个不同的 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 中 运行 的相同代码就像魅力一样。
抱歉打扰了大家,谢谢大家的帮助。
此致,
最大
试试这个:
__init__.py
import utils
show = utils.show
main.py
from sources import show
show()
如评论中所见....
将__init__.py
改为
from utils import show
Python 2.x, imports are implicitly relative. For instance, if you're editing the file foo/__init__.py
and want to import the module at foo/bar.py
, you could use import bar
.
In Python 3.0, this won't work, as all imports will be absolute by default. You should instead use from foo import bar
; if you want to import a specific function or variable from bar, you can use relative imports, such as 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
我已经在这里找到了几个不同的 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 中 运行 的相同代码就像魅力一样。
抱歉打扰了大家,谢谢大家的帮助。
此致, 最大
试试这个:
__init__.py
import utils
show = utils.show
main.py
from sources import show
show()
如评论中所见....
将__init__.py
改为
from utils import show
Python 2.x, imports are implicitly relative. For instance, if you're editing the file
foo/__init__.py
and want to import the module atfoo/bar.py
, you could useimport bar
.In Python 3.0, this won't work, as all imports will be absolute by default. You should instead use
from foo import bar
; if you want to import a specific function or variable from bar, you can use relative imports, such asfrom .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