博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 相对导入attempted relative import beyond top-level package
阅读量:5137 次
发布时间:2019-06-13

本文共 1593 字,大约阅读时间需要 5 分钟。

ValueError: attempted relative import beyond top-level package

假设有如下层次包目录

1 project/ 2     __init__.py 3     mypackage/ 4         __init__.py 5         A/ 6             __init__.py 7             spam.py     #* print("In spam") *# 8             grok.py     #* print("In grok") *# 9             C/10                 __init__.py11                 hello.py    #* print("In hello") *#12         B/13             __init__.py14             bar.py      #* print("In bar") *#15         run.py16     main.py

相对导入语法

from . import modulefrom .. import modulefrom ... import module
相对导入与模块__name__有关
  • run.py作为顶层模块执行导入A.spam时
    • run.py的__name__ 等于 __main__
    • spam.py的__name__ 等于 A.spam
    • A成为顶层的包,所以相对导入最多​只能访问到A,A之外的层次结构是不可见的
  • main.py作为顶层模块执行导入mypackage.A.spam是
    • main.py的 __name__ 为 __main__
    • spam.py的__name__ 为 mypackage.A.spam
    • mypackage成为顶层包,相对导入作用域扩大,B/包对spam.py可见
 
相对导入只适用于包中的模块,顶层的模块中将不起作用
  • 如果将run.py当作顶层执行模块
    • A/ 和 B/ 将成为  toplevel 
      package 顶层包 A/中的模块不能用相对导入来导入B/包中的模块,因为不能越过顶层包。
    • A/、B/ 包中的目录可以导入本包中及以下的模块
  • 如果将main.py当作顶层执行模块
    • mypackage/成为顶层包,A/可以访问到B/包,不会出现 ValueError: attempted relative import beyond top-level package

例子

## run.py (run.py当作顶层执行模块,即 python run.py)#----------- import A.spam ## spam.py#-------------- from . import grok      # okfrom .C import hello    # okfrom ..B import bar     # !Err                                                            ##—— ValueError: attempted relative import beyond top-level packageprint('In spam')  ## main.py#------------import mypackage.A.spam ## spam.py#------------- from ..B import bar     # okprint('In spam')

 

转载于:https://www.cnblogs.com/linkenpark/p/10909523.html

你可能感兴趣的文章
Mac下Python3.5.1+django1.10.1安装及eclipse配置
查看>>
Es首页
查看>>
wscript shell
查看>>
【百度语音识别】JavaAPI方式语音识别示例
查看>>
MongoDB 集群配置
查看>>
第二部分 : 简单句的核心变化(主语/宾语/表语的变化)
查看>>
FIFO页面置换算法
查看>>
第三章寄存器(内存访问)
查看>>
HTTP导出和上传文件处理
查看>>
定时每天执行前一天的数据导入oracle
查看>>
IOS 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: URLString'
查看>>
我这个IOS渣渣又来写随笔了
查看>>
gdb 远程调试 android native 程序
查看>>
多线程常用方法
查看>>
ViewPager 放到ListView HeadView中不显示的问题
查看>>
Web知识简易介绍及HTTP知识总结
查看>>
Net学习日记_ASP.Net_MVC_HtmlHelper_笔记
查看>>
在 Core Data 中存取 transformable 类型的数据
查看>>
ORACLE 最后表数据更新的时间
查看>>
常见公文——决定和请示
查看>>