导入python包

时间:2014-04-09 15:40:44

标签: python

pkg/
    __init__.py
    foo.py
    bar.py
    baz.py

我有一堆模块导入在foo.py,bar.py和baz.py之间是相同的。

我可以通过__init__.py进行导入吗?我需要在foo.py中写什么?

2 个答案:

答案 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 *