python相对引用_Python 模块相对引用
文件结构如下
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 模块相对引用相关推荐
- python中的imp模块——让引用模块更加简单
最近撸代码的时候发现python有一个imp模块,有点儿意思. 首先: pip install imp 看模块名,可以看出其实就是"import"的缩写.在功能上也一样,但用起来比 ...
- python变量回收_Python变量的引用、拷贝和回收机制
1.Python中变量的引用 Python中的变量都是指针,都是某个内存对象的引用. python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是"传对象引用" ...
- python中的引用_Python中的引用
我有一个多播网络,需要不断地向所有其他用户发送数据.我不想让程序员不断地改变数据包的发送方式.正因为如此,我试图找出如何引用Python中的任何对象或变量(我是Python新手),这样用户就可以修改它 ...
- python包之间引用_python 子包引用父包和其他子包
python 子包引用父包和其他子包 python引用子目录很简单, 里面放个__init__.py就可以了. 如何在子目录里面引用其他目录(父目录,爷目录和同辈分目录)呢? 例如: python有项 ...
- python zipfile教程_Python模块zipfile原理及使用方法详解
zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的 zipfile里有两个非常重要的class, 分别是ZipFile和Zi ...
- python queue函数_Python模块:queue
一.Python queue Python queue模块有三种队列: 1.FIFO队列先进先出. 2.LIFO类似于堆,即先进后出. 3.还有一种是优先级队列级别越低越先出来. 针对这三种队列分别有 ...
- python hashlib函数_python模块——hashlib
python模块--hashlib hashlib模块是对许多hash函数的一个公共接口 new(name, string = '') 执行给定的hash函数来返回一个新的hash对象,使用给定 ...
- python webbrowser安装_python模块webbrowser
在python中,webbrowser这个模块提供了一个抽象的接口,用来展现基于web的文档给客户.简单的说,他会去调用你机子默认的浏览器,展示你传进去的url.当调用浏览器失败的时候,会触发webb ...
- python绘制荷花_Python模块学习——optparse
Actions action 是 parse_args() 方法的参数之一,它指示 optparse 当解析到一个命令行参数时该如何处理.actions 有一组固定的值可供选择,默认是'store ' ...
最新文章
- https://www.ibm.com/developerworks/cn/topics/ ibm中国开发主题网站。
- html标签object和embed,html标签object和embed的区别
- java中匿名数组_Swagger UI:数组中的多个匿名对象
- windows WEB 服务器安全策略
- 【全军覆没】麻省理工把中国学生拉入黑名单,斯坦福取消中国大陆面试! 这是怎么了?...
- 线程相关的sleep()、yield()、wait()、join()方法介绍
- YAML_06 playbook从上往下顺序执行,若报错,不提示,继续往下执行
- 目前国内最热门的四款远程桌面控制软件
- Android MediaProjection截屏与录屏(ScreenCapture Library 的使用)(二)
- 串口 通讯 顶尖电子秤_串口通讯协议_电子秤的串口通讯协议解析 - 全文
- SiteApp转码声明 来自百度
- JPEG2000帧格式详解(一)
- u盘iso安装服务器系统怎么安装win7系统安装系统教程,u盘iso安装系统,小编教你u盘怎么安装win7系统...
- 【强大的PDF格式转换工具】Lighten PDF Converter OCR for Mac 6.2.0
- 一个普通的小活动让超市回头客源源不断?方案简单到爆
- 蓝牙遥控小车(详细免费教程)
- POSIX thread
- 网站APP数据库里的用户信息被泄露篡改怎么办
- python Excel 乱码 解决方案 编码 xlwings测试
- 什么是股票分仓软件, 实现原理解析1