python 模块相对导入

2021-02-25  本文已影响0人  hopless

Python 相对导入attempted relative import beyond top-level package

ValueError: attempted relative import beyond top-level package

假设有如下层次包目录

project/
    __init__.py
    mypackage/
        __init__.py
        A/
            __init__.py
            spam.py     #* print("In spam") *#
            grok.py     #* print("In grok") *#
            C/
                __init__.py
                hello.py    #* print("In hello") *#
        B/
            __init__.py
            bar.py      #* print("In bar") *#
        run.py
    main.py

相对导入语法

from . import module
from .. import module
from ... import module

相对导入与模块name有关

相对导入只适用于包中的模块,顶层的模块中将不起作用

例子

## run.py (run.py当作顶层执行模块,即 python run.py)
#-----------
 
import A.spam
 


## spam.py
#--------------
 
from . import grok      # ok
from .C import hello    # ok
from ..B import bar     # !Err 
                                                           ##—— ValueError: attempted relative import beyond top-level package
print('In spam') 
 


## main.py
#------------

import mypackage.A.spam
 




## spam.py
#-------------
 
from ..B import bar     # ok
print('In spam')
上一篇下一篇

猜你喜欢

热点阅读