Python 包
转载自https://www.cnblogs.com/feeland/p/4401758.html
Python 包
包 定义
为了组织好模块,会将多个模块分为包。Python 处理包也是相当方便的。简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件。
常见的包结构如下:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQMAAABkCAIAAAANNcLKAAAEtklEQVR4nO2a3dKrIAxFff+XzrlgxuEIxNBSzeZb66oixvxtBaeHAYDZ8bYDAClACQBmKAGggBIAzFACQAElAJihBIACSgAwQwkABZQAYIYSAAooAcDs7yjhOI7j+CvBwgf8oeZACeDwh5oDJYDDH2oOlAAO2ZvjXN93F/pHxehUPeKc6to5/idyXycK9iqZEShM3UDdzvZPtdc6F46mBe878n9qPryCQFVuG/fyuB212vluGZ117IxeCLwWtkGgKh8/+1s7IzHcNr3jTwTnlQJJEKhKZPXijMcvnLUThNWRBAJV+WC9fvuuiNtpXwvsE7ZEoCrOCttZsreL/np1NJp8mXa5V8Sl2xDiV8GTCJTkrb7hWf6nyF7ddx+i8ad4+9Tn2a+FZKnoMFiOZEuhBFiOZEuhBFiOZEtto4TZvQR7j98hmdZtugEl5EEyrXRDCzn5Esn0UfUWcvIlkulzPt6PTq2a/4so2sHu2ZEbDzhpzcLscrsf3f1JJF2XzviFUWePJoxi/11OLh0/65gKkt6rJ72mq4T44e349zgOdBUiimQAG+T9BCUkQTKADfJ+soES9iiHZAx7pL6QRwmjLa+zN3CukkMyhk1S3/vm4xzefiP6sil9sxGdSCMZxjbZl8DP9ja1kAwjYfaPSVT8GU14LJDHkIxkpwJAEiRbCiXAciRbCiXAciRbaj8lRNbczyzN98ttEMmwt6xWMKjfxb7fJngKybC3rNbrSnjGflokw96yWijhXSTDdj6Kz35En50/5VL3rHOhNRuG9pKuG0Eng/7ELYwcPkemvHoXARdbcma2Ln/9w2nl7m+/9W979zY5s/YdO12fPzb4LhpeXsiZ3FklzI53D633Ogp6250/pYTR4SiWzMg4WpMzvy8q4WNXI/YjRkY2c1aqi4yjNTnzq6KEhauj0WE38OQo+XqSM8Xf7BOcNffr+4TRist5sThXpUXJ15OEKa7X3PWPy1mnYy5i6Fob2XHs+962N2rtOEpwbpqwRj5i7hbksrwlfhXkaiTmbkEuy8/TPvXjb4wp+8Hx/Oh5bCgBfoBkS6EEWI5kS6EEWI5kS+2nhMja+oEl+C92FCpIBrxlneIfQJ9xYMskO0hGu2WRUMK7SEa7ZZFQwrtIRut8LB+dWjV/yqXuWedCazYM7SVdN4JOxuff2vEdPkemvHoXARdbcma2Ln/9w2nl7m+/9bta8id8MD+S4UvHf+xPEjS8vJAzubNKmB3vHtrgT0QRb53XVNDC6HAUS2ZkHK3Jmd8XlfCxqxH7ESMjmzkr1UXG0Zqc+VVRQnC19r2dnGUaoeTrSc4Uf7NPcNbcj+0TnPHbvcRozeZ7kgolX08Sprhec9c/LmedjrmIoWttZMex73vb3qg15SjBuWnCGvmIuVuQy/KW+FWQq5GYuwW5LD9P+4CPvzGm7AfH86PnsaEE+AGSLYUSYDmSLYUSYDmSLYUSYDmSLYUSYDmSLYUSYDmSLYUSYDmSLeV8LB+dWjUfdoXqApihBIACSgAwQwkABZSwjNGuenYcXoFKLAMlSEMlAMxQAkABJQCYoQSAAkoAMEMJAAWUAGCGEgAKKAHADCUAFFACgBlKACj8A9zJwiqHijmKAAAAAElFTkSuQmCC" alt="" />
最简单的情况下,只需要一个空的 __init__.py 文件即可。当然它也可以执行包的初始化代码,或者定义稍后介绍的 __all__ 变量。当然包底下也能包含包,这和文件夹一样,还是比较好理解的。
导入包
包的导入仍使用 import 、 from ... import 语句,使用 “圆点模块名” 的结构化模块命名空间。 下面来看一个包的例子来了解下具体的运作。(官方文档中的例子)
假设你现在想要设计一个模块集(一个“包”)来统一处理声音文件和声音数据。存在几种不同的声音格式(通常由它们的扩展名来标识,例如: .wav, .aiff, .au )于是,为了在不同类型的文件格式之间转换,你需要维护一个不断增长的包集合。可能你还想要对声音数据做很多不同的操作(例如混音,添加回声,应用平衡 功能,创建一个人造效果)所以你要加入一个无限流模块来执行这些操作。你的包可能会是这个样子(通过分级的文件体系来进行分组):
aaarticlea/png;base64,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" alt="" />
用户可以每次只导入包里的特定模块,例如: import sound.efforts.echo 这样就导入了 sound.effects.echo 子模块。它必须通过完整的名称来引用:
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
导入包时有一个可以选择的方式: from sound.effects import echo 这样就加载了 echo 子模块,并且使得它在没有包前缀的情况下也可以使用,所以它可以如下方式调用:
echo.echofilter(input, output, delay=0.7, atten=4)
还有另一种变体用于直接导入函数或变量: from sound.effects.echo import echofilter 这样就又一次加载了 echo 字模块,但这样就可以直接调用它的 echofilter() 函数:
echo.echofilter(input, output, delay=0.7, atten=4)
需要注意的是 from package import item 方式导入包时,这个子项(item)既可以是子包也可以是其他命名,如函数、类、变量等。若无,会引发ImportError异常。
而用类似 import item.subitem.subsubitem 这样的语法时,这些子项必须是包,最后的子项可以是包或模块,但不能是类、函数、变量等。
从 * 导入包
import * 这样的语句理论上是希望文件系统找出包中所有的子模块,然后导入它们。这可能会花长时间,并出现边界效应等。Python 解决方案是提供一个明确的包索引。
这个索引由 __init__.py 定义 __all__ 变量,该变量为一列表,如上例 sound/effects 下的 __init__.py 中,可定义 __all__ = ["echo","surround","reverse"]
这意味着, from sound.effects import * 会从对应的包中导入以上三个子模块; 尽管提供 import * 的方法,仍不建议在生产代码中使用这种写法。
包内引用
如果是子包内的引用,可以按相对位置引入子模块 以 echo 模块为例,可以引用如下:
1 from . import reverse # 同级目录 导入 reverse
2 from .. import frormats # 上级目录 导入 frormats
3 from ..filters import equalizer # 上级目录的filters模块下 导入 equalizer
多重目录包搜索
包支持一个更为特殊的特性, __path__ 在包的 __init__.py 文件代码执行前,该变量初始化一个目录名列表。作用于子包和模块的搜索功能。
该功能可以用于扩展包中的模块集,不过不常用。
Python 包的更多相关文章
- 离线pip下载Python包
离线pip下载Python包 这几天搞Windows离线断网环境下安装Python包,配置环境,各种坑!做个记录,供以后查询吧. # 生产环境 windows xp# python 2 ...
- 【转】linux和windows下安装python集成开发环境及其python包
本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...
- RobotFramework中加载自定义python包中的library(一个py文件中有多个类)
结构如下: appsdk\ appsdk.py(这里面有多个类,包括appsdk,appsdksync等类) __init__.py ... ① 有个appsdk的文件夹(符合python包的定义) ...
- centos 7 下安装numpy、scipy等python包
本文适用于刚入门的小白,欢迎大牛们批评指正. 因为要开始数据分析,而python又不像R和matlab那么简洁.需要安装的包很多~ 网上找了好多牛人博客,想在centos7下安装numpy,scipy ...
- python 包管理工具
python 包管理工具 Python当前的包管理工具链是 easy_install/pip + distribute/setuptools + distutils,显得较为混乱. 而将来的工具链组合 ...
- Python 包管理工具解惑
Python 包管理工具解惑 本文链接:http://zengrong.net/post/2169.htm python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到 ...
- Python 包的相对导入讲解
[Python 包的相对导入讲解] 参考:http://www.dai3.com/python-import.html
- 转: CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法
from: http://www.linuxde.net/2014/05/15576.html CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法 2014/05/ ...
- 纯Python包发布setup脚本编写示例
如果你有多个模块需要发布,而它们又存在于多个包中,那么指定整个包比指定模块可能要容易地多.即使你的模块并不在一个包内,这种做法也行的通:你可以告诉Distutils从根包(root package)处 ...
- windows 64位 dll文件 位置及python包rtree shapely安装
位置 \Windows\System32 python包依赖包安装 rtree 依赖 spatialindex(spatialindex.dll spatialindex_c.dll) shape ...
随机推荐
- python高并发的解决方案
一.cnd加速 简单说就是把静态资源放到别人服务器上 全称:Content Delivery Network或Content Ddistribute Network,即内容分发网络 基本思路: 尽可能 ...
- 1. github配置
1. 安装:官网傻瓜式安装 2.密钥的生成:为了不让不想干的人提交代码,所以需要一个密钥 执行这个命令 : ssh-keygen -t rsa -C "邮箱地址" 然后一直回车键回 ...
- 对C# .Net4.5异步机制测试
static void Main(string[] args) { Test(); // 这个方法其实是多余的, 本来可以直接写下面的方法 // await GetName() // 但是由于控制台的 ...
- 数据库工具类 JdbcUtils
什么时候自己创建工具类 如果一个功能经常用到 我们建议把这个功能做成工具类 创建JdbcUtils包含三个方法 1: 把几个字符串 定义为常量 2:得到数据库连接getConnection(); 3 ...
- BZOJ2815 拓扑排序 + LCA
https://www.lydsy.com/JudgeOnline/problem.php?id=2815 作为一个DAG图,结点之间又有这么明显的等级之分,很容易想到的是拓扑排序. 但是不管是正向的 ...
- 体验Hadoop3.0生态圈-CDH6.1时代的来临
体验Hadoop3.0生态圈-CDH6.1时代的来临 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我在公司使用的是CDH5.15.1这个发行版本,具体的部署文档之前也有给大家分享 ...
- Linux虚拟内存(swap)调优篇-“swappiness”,“vm.dirty_background_ratio”和“vm.dirty_ratio”
Linux虚拟内存(swap)调优篇-“swappiness”,“vm.dirty_background_ratio”和“vm.dirty_ratio” 作者:尹正杰 版权声明:原创作品,谢绝转载 ...
- git中tag的使用
1.获取tags $ git tag 2.新建tag 有记录信息 $git tag -a releases-1.0.1 -m 'add i.sh file.' 没有记录信息 $git tag ...
- ES6checker ES6浏览器检测
检测地址如下: http://ruanyf.github.io/es-checker/index.cn.html Chrome 44检测结果如下:
- Android开发入门经典实例
开发实例概述 今天带大家做一个简单的Android App,这个App会显示创新工程实践老师们的照片和信息,不妨先看一看效果: 虽然这个App非常简单,但是涉及到了Android开发中的一些关键知识, ...