尽管在一个目录中具有__init__.py的软件包,但“尝试在非软件包中进行相对导入”

发布于 2021-01-29 17:04:40

我有一个名为的模块extended.py,其中包含以下行:

from .basic import BasicModule

该文件与basic.py驻留在同一目录中__init__.py。但是,当我尝试将其运行为:

python extended.py

我得到错误:

ValueError: Attempted relative import in non-package

还添加以下行:

from __future__ import absolute_import

无法解决问题。也许我太累了,看不到明显的东西-但我在这里看不到问题。

关注者
0
被浏览
212
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    相对导入仅适用于程序包,但是在导入时,extended.py您正在运行的是 顶层模块

    当前目录可能包含一个__init__.py文件,但exended.py尚未成为软件包的一部分。

    对于某些东西被认为是软件包,您需要导入 目录名称 。以下将起作用:

    main.py
    
    packagename\
        __init__.py
        basic.py
        extended.py
    

    然后main.py放入:

    import packagename.extended
    

    只有 然后extended一个包的一部分,做相对导入工作。

    相对进口现在拥有的东西是相对的 packagename父。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看