【问题标题】:Difference between "import something" and "from . import something" in python? [duplicate]python中“import something”和“from .import something”之间的区别? [复制]
【发布时间】:2022-01-12 13:58:42
【问题描述】:

目录结构:

| 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。 >

【问题讨论】:

  • 你运行哪个文件? main.py ?
  • @SorousHBakhtiary,是的。
  • @Pranav 我得到不同的错误:No module named 'linalg'。你用 Pycharm 运行它吗?因为我认为Pycharm会自动将工作区添加到环境变量中
  • @SorousHBakhtiary ,是的,我已经在问题中更正了它,我不知道为什么它第一次显示的错误不同。

标签: python python-3.x import module


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    相关资源
    最近更新 更多