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作为顶层模块执行导入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 # 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')

Python 相对导入attempted relative import beyond top-level package的更多相关文章

  1. python相对包导入报“Attempted relative import in non-package”错误

    文章是从stackoverflow翻译过来的,原文地址:Relative imports for the billionth time 本文要在原理上解决  python当中相对包导入出现的问题. 问 ...

  2. python:Attempted relative import in non-package

    problem:Attempted relative import in non-package 所谓相对路径其实就是相对于当前module的路径,但如果直接执行脚本,这个module的name就是“ ...

  3. Python ValueError: Attempted relative import in non-package Relative import相对引用 错误

    包含相对路径import的python脚本不能直接运行,只能作为module被引用. 例如 from . import mod1 有这样代码的文件只能最为moulule为不能直接运行.相对路径就是相对 ...

  4. Python工程:ImportError: attempted relative import with no known parent package

    Python工程:ImportError: attempted relative import with no known parent package 解决方法: 1.对每个目录创建的时候都选择创建 ...

  5. 执行代码出现ImportError:attempted relative import with no known parent package

    前言 在这篇文章中,我将会解析 ImportError: attempted relative import with no known parent package 这个异常的原因.当你在运行的py ...

  6. ValueError: Attempted relative import in non-package

    执行:python deom/scripts/populate.py ValueError: Attempted relative import in non-package solve:python ...

  7. Python导入自定义类时显示错误:attempted relative import beyond top-level package

    显示这个错误可能有两个原因: 1.文件夹中没有包含__init__.py文件,该文件可以为空,但必须存在该文件. 2.把该文件当成主函数入口,该文件所在文件夹不能被解释器视作package,所以可能导 ...

  8. 相对导入中Attempted relative import in non-package问题

    这一篇应该是解释的比较清楚: http://stackoverflow.com/questions/14664313/attempted-relative-import-in-non-package- ...

  9. python引入pytesseract报错:ValueError: Attempted relative import in non-package

    http://blog.csdn.net/yifengfuxue/article/details/79015651

随机推荐

  1. 'CSRFCheck' object has no attribute 'process_request' 报错

    环境:Python3.5 way 1: way 2: 在项目的setting.py中设置

  2. 洛谷 P1140 相似基因 题解

    每日一题 day23 打卡 Analysis dp[i][j]表示序列A中前i个与序列B中前j个匹配的相似度最大值 所以,dp方程很容易想到: 1.让a[i]与b[j]匹配 2.让a[i]与B序列中一 ...

  3. input重复上传图片失效的问题

    使用input的file来上传图片 如果是重复选择相同的图片就会失效 解决的办法就是当每次上传完图片后让input的值为空就可以解决了 附上代码 只需在末尾添加这句就行$(this).val(&quo ...

  4. centos host-only网卡配置

    1.更改网卡配置 更改虚拟机/etc/sysconfig/network-scripts/ifcfg-enp0s3 文件,内容如下: TYPE=Ethernet PROXY_METHOD=none B ...

  5. 《挑战30天C++入门极限》C++运算符重载赋值运算符

        C++运算符重载赋值运算符 自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用类似,但是要要注意的是,它与拷贝构造函数与析构函数一样,要注意深拷贝浅拷贝的问题,在没有深拷贝浅拷贝的情况下 ...

  6. centos安装浏览器【备份】

    chrome(谷歌)  添加源:sudo wget http://repo.fdzh.org/chrome/google-chrome-mirrors.repo -P /etc/yum.repos.d ...

  7. css笔记 - flex弹性盒布局

    flex: display:-webkit-box | -moz-box;盒布局 -webkit-box-flex | -moz-box-flex;弹性盒布局 -webkit-box-ordinal- ...

  8. Zabbix优化

    参考 zabbix默认的配置即使机器128核心,256内存,只能抗住10-20台的监控,如果再多就需要修改配置了. 一.配置文件 server端配置文件添加如下 StartPollers=160 St ...

  9. Shell编程—企业生产案例

    Linux系统Shell编程—企业生产案例(一) 企业数据库可以说是重点保护对象啊,没有之一,数据在当今企业里就是生命线,因此今天就来说一说,如何通过shell脚本来检查或监控MYSQL数据库服务是否 ...

  10. VsCode插件与Node.js交互通信

    首先关于VsCode插件通信,如果不明白的可以参考我的这篇博客VsCode插件开发之插件初步通信 如果需要详细例子的话,可以参考VsCode插件开发 现在又有一个新的需求是,VsCode插件可以通过j ...