文件结构如下

python_directory/

├── __init__.py

└── app

├── __init__.py

├── sub1

│   ├── __init__.py

│   └── mod1.py

└── sub2

├── __init__.py

├── mod2.py

除了 mod1.py,其他文件内容都为空。

mod1.py

print('__name__: {}'.format(__name__))

print('__package__: {}'.format(__package__))

from ..sub2 import mod2

print('Import Successfully!')

如果 __package__ 不为空,相对引用会根据 __package__ 而不是 __name__[2]。

Relative Import In Non-Package

如果直接执行一个模块,那么它的 __name__ 为 __main__。Python 会认为这个模块是一个最顶层的模块,而不管这个模块在文件系统中的实际位置[1]。

$ pwd

/path_to/python_directory

$ python app/sub1/mod1.py

__name__: __main__

__package__: None

Traceback (most recent call last):

File "app/sub1/mod1.py", line 3, in

from ..sub2 import mod2

ValueError: Attempted relative import in non-package

一个最顶层的模块 -- 我理解为 Python 把这个模块复制到在一个单独的目录中然后再执行,由于该目录下只有这个一个模块, 所以它不是一个 package。

Beyond Top Level Package

$ pwd

/path_to/python_directory/app

$ python -m sub1.mod1

__name__: __main__

__package__: sub1

Traceback (most recent call last):

File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 174, in _run_module_as_main

"__main__", fname, loader, pkg_name)

File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 72, in _run_code

exec code in run_globals

File "/path_to/python_directory/app/sub1/mod1.py", line 4, in

from ..sub2 import mod2

ValueError: Attempted relative import beyond toplevel package

由于 -m sub1.mod1,Python 将 package 的顶层视为 sub1,而 ..sub2 位于 app/,超过了当前的最顶层 sub1,所以报错。

└── app

├── __init__.py

├── sub1

│   ├── __init__.py

│   └── mod1.py

└── sub2

正确的调用

$ pwd

/path_to/python_directory

$ python -m app.sub1.mod1

__name__: __main__

__package__: app.sub1

Import Successfully!

此时 ..sub2 相当于 app.sub2。

参考

python相对引用_Python 模块相对引用相关推荐

  1. python中的imp模块——让引用模块更加简单

    最近撸代码的时候发现python有一个imp模块,有点儿意思. 首先: pip install imp 看模块名,可以看出其实就是"import"的缩写.在功能上也一样,但用起来比 ...

  2. python变量回收_Python变量的引用、拷贝和回收机制

    1.Python中变量的引用 Python中的变量都是指针,都是某个内存对象的引用. python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是"传对象引用" ...

  3. python中的引用_Python中的引用

    我有一个多播网络,需要不断地向所有其他用户发送数据.我不想让程序员不断地改变数据包的发送方式.正因为如此,我试图找出如何引用Python中的任何对象或变量(我是Python新手),这样用户就可以修改它 ...

  4. python包之间引用_python 子包引用父包和其他子包

    python 子包引用父包和其他子包 python引用子目录很简单, 里面放个__init__.py就可以了. 如何在子目录里面引用其他目录(父目录,爷目录和同辈分目录)呢? 例如: python有项 ...

  5. python zipfile教程_Python模块zipfile原理及使用方法详解

    zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的 zipfile里有两个非常重要的class, 分别是ZipFile和Zi ...

  6. python queue函数_Python模块:queue

    一.Python queue Python queue模块有三种队列: 1.FIFO队列先进先出. 2.LIFO类似于堆,即先进后出. 3.还有一种是优先级队列级别越低越先出来. 针对这三种队列分别有 ...

  7. python hashlib函数_python模块——hashlib

    python模块--hashlib hashlib模块是对许多hash函数的一个公共接口 new(name, string = '')    执行给定的hash函数来返回一个新的hash对象,使用给定 ...

  8. python webbrowser安装_python模块webbrowser

    在python中,webbrowser这个模块提供了一个抽象的接口,用来展现基于web的文档给客户.简单的说,他会去调用你机子默认的浏览器,展示你传进去的url.当调用浏览器失败的时候,会触发webb ...

  9. python绘制荷花_Python模块学习——optparse

    Actions action 是 parse_args() 方法的参数之一,它指示 optparse 当解析到一个命令行参数时该如何处理.actions 有一组固定的值可供选择,默认是'store ' ...

最新文章

  1. https://www.ibm.com/developerworks/cn/topics/ ibm中国开发主题网站。
  2. html标签object和embed,html标签object和embed的区别
  3. java中匿名数组_Swagger UI:数组中的多个匿名对象
  4. windows WEB 服务器安全策略
  5. 【全军覆没】麻省理工把中国学生拉入黑名单,斯坦福取消中国大陆面试! 这是怎么了?...
  6. 线程相关的sleep()、yield()、wait()、join()方法介绍
  7. YAML_06 playbook从上往下顺序执行,若报错,不提示,继续往下执行
  8. 目前国内最热门的四款远程桌面控制软件
  9. Android MediaProjection截屏与录屏(ScreenCapture Library 的使用)(二)
  10. 串口 通讯 顶尖电子秤_串口通讯协议_电子秤的串口通讯协议解析 - 全文
  11. SiteApp转码声明 来自百度
  12. JPEG2000帧格式详解(一)
  13. u盘iso安装服务器系统怎么安装win7系统安装系统教程,u盘iso安装系统,小编教你u盘怎么安装win7系统...
  14. 【强大的PDF格式转换工具】Lighten PDF Converter OCR for Mac 6.2.0
  15. 一个普通的小活动让超市回头客源源不断?方案简单到爆
  16. 蓝牙遥控小车(详细免费教程)
  17. POSIX thread
  18. 网站APP数据库里的用户信息被泄露篡改怎么办
  19. python Excel 乱码 解决方案 编码 xlwings测试
  20. 什么是股票分仓软件, 实现原理解析1

热门文章

  1. python3源代码是什么_如何用inspect查找python3源代码?
  2. 励志!从中专生到清华博士的逆袭人生
  3. 国外数学奇才称:“平行线可相交”,到死未被认可,12年后被证实
  4. 哥廷根,世界数学家的摇篮和圣地
  5. 这个神器火了,做个高大上的PPT演示竟然就这么简单!
  6. MD文件图片base64自动编码
  7. 【转载保存】接口压力测试安装与使用
  8. IO之 随机访问文件(RandomAccessFile)
  9. Hbase快照Snapshot 数据备份、恢复与迁移
  10. EventBridge 事件总线及 EDA 架构解析