在阅读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的多层包调用的更多相关文章

  1. Python 的 JPype 模块调用 Jar 包

    背景与需求 最近学习并安装使用了HttpRunner框架去尝试做接口测试,并有后续在公司推广的打算. HttpRunner由Python开发,调用接口时需要依赖Python:而大多数公司的扩展工具包使 ...

  2. Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)

    Python 在子类中调用父类方法详解(单继承.多层继承.多重继承)   by:授客 QQ:1033553122   测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...

  3. (转载)Python 的 JPype 模块调用 Jar 包

    Python 的 JPype 模块调用 Jar 包 背景与需求 最近学习并安装使用了HttpRunner框架去尝试做接口测试,并有后续在公司推广的打算. HttpRunner由Python开发,调用接 ...

  4. Python之扩展包安装

    读者朋友,在比较新的版本(Python 2 >=2.7.9 or Python 3 >=3.4)中,pip或者easy_install 扩展包命令已经默认安装(可查看   你的安装目录\p ...

  5. [resource]23个python的机器学习包

    23个python的机器学习包,从常见的scikit-learn, pylearn2,经典的matlab替代orange, 到最新最酷的Theano(深度学习)和torch 7 (well,其实lua ...

  6. python——模块和包 需要注意的地方

    一 模块 1.import import module: 将执行文件(module)的目录路径插入到sys.path的第一个位置 执行时: 1.创建新的名称空间 2.执行被调用的模块 第二次调用,不会 ...

  7. Python/模块与包之模块

    Python/模块与包之模块 1.什么是模块? 模块就是py文件 2.为什么要用模块? 如果在解释器上进行编码,把解释器关闭之前写的文件就不存在了,如果使用模块的话就能永久保存在磁盘中. 3.如何使用 ...

  8. python的request包

    1,request包基本用法 import requests a=requests.get("http://www.baidu.com")print a.text #以文本形式打印 ...

  9. Python解析Pcap包类源码学习

    0x1.前言 ​ 在现场取证遇到分析流量包的情况会比较少,虽然流量类设备原理是把数据都抓出来进行解析,很大一定程度上已经把人可以做的事情交给了机器自动完成. ​ 可用于PCAP包分析的软件比如科来,W ...

  10. Python中的包ImportError

    前言 Python中的包给我提供了很好的代码组织,相似的功能模块放在同一个包内,不仅代码结构清晰,而且调用起来也比较方便(可以用*导入) 但是,我们在刚开始使用Python包的时候总是会遇到导入错误& ...

随机推荐

  1. AI 艺术工具通讯

    创刊号 AI 领域的发展速度令人惊叹,回想一年前我们还在为生成正确手指数量的人像而苦苦挣扎的场景,恍如隔世 . 过去两年对开源模型和艺术创作工具而言具有里程碑意义.创意表达的 AI 工具从未像现在这般 ...

  2. 【COM3D2Mod 制作教程(3)】Mod 制作概要

    [COM3D2Mod 制作教程(3)]Mod 制作概要 制作工具整合包:https://mod.3dmgame.com/mod/205516 该工具包简单整合了些本章需要的小型工具.插件.以及其他一些 ...

  3. MySQL - [03] 数据库引擎

    所有的数据库文件都存在data目录下,本质还是文件的存储. -- 建表时指定编码格式为中文utf-8 CREATE TABLE IF NOT EXISTS `student` ( `id` INT(4 ...

  4. Flink学习(四) Flink Table & SQL 实现wordcount Java版本

    Flink Table & SQL WordCountFlink SQL 是 Flink 实时计算为简化计算模型,降低用户使用实时计算门槛而设计的一套符合标准 SQL 语义的开发语言. 一个完 ...

  5. mybatis-generator 自动生成mybatis代码与xml

    一.pxm.xml中引入mybatis-generator并配置 在build节点下的plugins下添加org.mybatis.generator 示例代码如下: <?xml version= ...

  6. Ubuntu修改密码和用户名

    Ubuntu是一个Linux操作系统,修改密码和用户名是有危险的动作,请谨慎修改. 一.Ubuntu修改密码和用户名 Ubuntu更改密码步骤:1.进入Ubuntu,打开一个终端,输入 sudo su ...

  7. 《空间三角面片对相交判断算法》的matlab实现_ 0.2微秒

    function [flag] = InsectTriPatch(T1,T2) % 判断两个空间三角形面片是否相交 % T1=[0 0 0; % 2 0 0; % 0 1.5 0; % 0 0 1]; ...

  8. windows在Apple Developer创建打包证书的简单教程

    在uniapp上做ios开发,其开发证书必须在Apple Developer(苹果开发者中心)上使用自己个人或自己公司的开发者账号,创建打包的证书,然后上架的时候使用同一个账号上架Apple Deve ...

  9. FastAPI 参数别名与自动文档生成完全指南:从基础到高级实战 🚀

    title: FastAPI 参数别名与自动文档生成完全指南:从基础到高级实战 date: 2025/3/10 updated: 2025/3/10 author: cmdragon excerpt: ...

  10. js调用本地程序资源-兼容所有浏览器

    在网页上通过JavaScript调用本地程序,兼容IE8/9/10/11.Opera.Chrome.Safari.Firefox等所有浏览器,在做Web开发时经常会遇到需要调用本地的一些exe或者dl ...