python的多层包调用
在阅读tvm 前端代码时发现了诸如from ... import nd as _nd/from .. import analysis之类的代码,因长时间未接触python,感到格外好奇
参考:PEP 328 – Imports: Multi-Line and Absolute/Relative
官方文档中介绍了绝对导入(Absolute Imports) 与 相对导入( Relative Imports) 的内容,很显然,源码中的代码导入方式为 相对导入。
(PS:个人理解就是绝对路径导入和相对路径导入两种方式)
官方示例
首先,一个包的结构如下:
package/
__init__.py
subpackage1/
__init__.py
moduleX.py
moduleY.py
subpackage2/
__init__.py
moduleZ.py
moduleA.py
假设当前文件是moduleX.py或 subpackage1/init.py,相对导入的方式如下:
from .moduleY import spam
from .moduleY import spam as ham
from . import moduleY
from ..subpackage1 import moduleY
from ..subpackage2.moduleZ import eggs
from ..moduleA import foo
from ...package import bar
from ...sys import path
另,目录中的__init__.py文件,里面写了import时执行的代码,也就是import时,会先去目录/init.py找需要导入的包
tvm onnx源码
首先看下tvm中的tvm/python/tvm/relay目录的层级结构:

onnx.py文件想导入nd的包,执行的导入代码如下:
from ... import nd as _nd
PS: 一个点就是当前文件的目录,两个点就是上级目录,三个点就是上上级的目录,感觉像是linux的目录结构似的
那from ... import nd 就是从上上级目录导入nd包
onnx.py的上上级目路就到了tvm/python/tvm 目录了,此时它会去找该目录下的__init__.py文件,查找详细的导入路径
在__init__.py文件中可看到如下代码:
from .runtime import ndarray as nd
至此,python解释器便可找到了nd这个包了
python的多层包调用的更多相关文章
- Python 的 JPype 模块调用 Jar 包
背景与需求 最近学习并安装使用了HttpRunner框架去尝试做接口测试,并有后续在公司推广的打算. HttpRunner由Python开发,调用接口时需要依赖Python:而大多数公司的扩展工具包使 ...
- Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)
Python 在子类中调用父类方法详解(单继承.多层继承.多重继承) by:授客 QQ:1033553122 测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...
- (转载)Python 的 JPype 模块调用 Jar 包
Python 的 JPype 模块调用 Jar 包 背景与需求 最近学习并安装使用了HttpRunner框架去尝试做接口测试,并有后续在公司推广的打算. HttpRunner由Python开发,调用接 ...
- Python之扩展包安装
读者朋友,在比较新的版本(Python 2 >=2.7.9 or Python 3 >=3.4)中,pip或者easy_install 扩展包命令已经默认安装(可查看 你的安装目录\p ...
- [resource]23个python的机器学习包
23个python的机器学习包,从常见的scikit-learn, pylearn2,经典的matlab替代orange, 到最新最酷的Theano(深度学习)和torch 7 (well,其实lua ...
- python——模块和包 需要注意的地方
一 模块 1.import import module: 将执行文件(module)的目录路径插入到sys.path的第一个位置 执行时: 1.创建新的名称空间 2.执行被调用的模块 第二次调用,不会 ...
- Python/模块与包之模块
Python/模块与包之模块 1.什么是模块? 模块就是py文件 2.为什么要用模块? 如果在解释器上进行编码,把解释器关闭之前写的文件就不存在了,如果使用模块的话就能永久保存在磁盘中. 3.如何使用 ...
- python的request包
1,request包基本用法 import requests a=requests.get("http://www.baidu.com")print a.text #以文本形式打印 ...
- Python解析Pcap包类源码学习
0x1.前言 在现场取证遇到分析流量包的情况会比较少,虽然流量类设备原理是把数据都抓出来进行解析,很大一定程度上已经把人可以做的事情交给了机器自动完成. 可用于PCAP包分析的软件比如科来,W ...
- Python中的包ImportError
前言 Python中的包给我提供了很好的代码组织,相似的功能模块放在同一个包内,不仅代码结构清晰,而且调用起来也比较方便(可以用*导入) 但是,我们在刚开始使用Python包的时候总是会遇到导入错误& ...
随机推荐
- 互联网和DeepSeak时代,获取信息这么容易,为什么我们还是学习不好?
因为人性倾向于立即获得享受,而不是延迟获得享受,然而,学习就是延迟获得享受,所以,学习,其实是反人性的一种活动. 学习,特别是对知识的深入学习,其实需要付出大量的时间和精力,这个过程中必然伴随着各种各 ...
- Java01 - Scanner对象
简介 之前我们学的基本语法中并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入.java.util.Scanner是Java5的新特征,我们可以通过Scanner ...
- idea中启动web、jsp项目
1. idea打开项目 选择要打开的项目的根目录 2. 项目配置 配置jdk modules配置 添加web 添加依赖 删除爆红的依赖 添加依赖目录或者jar 配置web.xml 配置lib 如果没有 ...
- web站点常见漏洞及解决方法
1.PHP Web表单哈希冲突拒绝服务漏洞 漏洞分析:PHP 5.3.9之前版本在计算表单参数哈希值的实现上存在拒绝服务漏洞,该漏洞源于未提前限制哈希冲突.攻击者可利用该漏洞通过发送小量的特制webf ...
- HTTP内容编码和HTTP压缩的区别
HTTP压缩,在HTTP协议中,其实是内容编码的一种. 在http协议中,可以对内容(也就是body部分)进行编码, 可以采用gzip这样的编码. 从而达到压缩的目的. 也可以使用其他的编码把内容搅乱 ...
- WEBGL 笔记
目录 前言 h2 { text-align: center } 前言 WebGL 是一个在浏览器里使用的高效渲染二维和三维图形的 javascript API,于 2006 年起源,该技术基于 Ope ...
- 支付系统扩展:ZKmall开源商城支持跨境多币种结算的开发实践
于跨境电商平台而言,多币种支付是满足全球消费者支付需求的关键.不同国家和地区的消费者习惯使用各自的货币进行支付,如果平台不支持多币种交易,将极大地限制用户的购买意愿和支付便利性.因此,跨境电商平台必须 ...
- FastAPI依赖注入:链式调用与多级参数传递
title: FastAPI依赖注入:链式调用与多级参数传递 date: 2025/04/05 18:43:12 updated: 2025/04/05 18:43:12 author: cmdrag ...
- Linux shutdown 命令
Linux shutdown 命令可以用来进行关机程序,并且在关机以前传送讯息给所有使用者正在执行的程序,shutdown 也可以用来重开机. 使用权限:系统管理者. 语法 shutdown [-t ...
- springboot将vo生成文件到目录
依赖 org.springframework spring-mock 2.0.8 com.alibaba fastjson 1.2.62 service实现 public RestResponseBo ...