python中"import something"和"from . import something"的区别?

Difference between "import something" and "from . import something" in python?

目录结构:

| Packages
    | noobpy
        | __init__.py
        | linalg.py
    | main.py

linalg.py:

def inv():
    print("inv called")

main.py :

import noobpy as np
np.linalg.inv()

在__init__.py中:

当我使用:

import linalg

当运行 main.py

时,它会抛出错误“No module named 'linalg'

但是当我使用时:

from . import linalg

在 _init_ 内部,它工作得很好,即使我可以在 _init_[ 内部调用 linalg.inv =39=] 在这两种情况下。

(在作为重复关闭之前作为评论发布。)

当您 运行 main.py 时,某些目录已添加到 Python 搜索路径中,导入机制将在其中查找模块。 main.py 本身所在的目录被添加到路径中。在这种情况下,它 包含包 noobpy。您必须注意,目录 noobpy 本身在搜索路径上 而不是

当您尝试使用绝对 import linalg 时,搜索路径上没有目录包含名为 linalg 的模块,因此导入失败。

当您尝试使用相对导入 from . import lining 时,. 指的是当前包,即 noobpy 本身,而 noobpy 是否包含模块 linalg