pkg/
__init__.py
foo.py
bar.py
baz.py
我有一堆模块导入在foo.py,bar.py和baz.py之间是相同的。
我可以通过__init__.py
进行导入吗?我需要在foo.py中写什么?
答案 0 :(得分:1)
你猜对了这样做的正确方法,但是我可以使这更加正式,并且(希望)给出比你在其他地方找到的更清楚的解释。如果你想模块化导入,这取决于你的编码理念本身可能是好的或坏的想法(透明度与代码重用),无论导入是否发生在__init__.py
,你都可以导入你的导入另一个脚本。例如:
"""import_scripts.py"""
import numpy as np
import scipy as sp
...
"""actual_code.py"""
from import_scripts import *
# np and sp are now in scope
从__init__.py
导入大致相同,如果您从同一模块访问它,则传统上只使用相对导入:
# To import form __init__
from . import *
重要的是要注意,这些导入仅在您将这些python脚本显式地作为模块而不是脚本运行时才有效。这意味着:
python -m foo
而不是
python foo.py
重要但微妙的区别。
希望有所帮助。如果您还有其他问题,请与我们联系。
答案 1 :(得分:1)
将导入放在__init__.py
中是个坏主意; __init__.py
用作模块对象的内容,因此它是一个公共接口。此外,导入包时最初导入__init_.py
,而实际上在子模块需要导入之前实际上不需要导入。
最好的方法是将公共代码放在内部详细信息模块中,标记有单个初始下划线(意为“私有”),例如_imports.py
,然后在其他文件中写下from ._imports import *
。