cookbook_模块和包
1把模块按层次结构组织成包
只需确保每个目录中都定义了__init__.py即可。
2对所有符号的导入进行精确控制
当用户使用from module import * 语句时,我们希望对从模块或包中导入的符号进行精确控制。
在模块中定义一个变量__all__,用来显示列出可导出的符号名。
__all__ = ["spam","grok"]
3使用相对名称来导入包中的子模块
mypackage/
__init__.py
A/
__init__.py
spam.py
grok.py
B/
__init__.py
bar.py #spam.py
from . import grok
from ..B import bar
使用该方法来导入包内模块,可以很好的减少硬编码导入模块,如果使用绝对名称导入,如果最顶端的文件名变化所有的导入都将出现问题。
ps.
执行脚本出现导入错误时 python3 -m mypackage
4将模块分解成多个文件
在不破坏使用结构的情况下,将一个模块分解成多个模块
首先将模块变成包,在包内__init__.py文件内将子模块导入。
5让各个目录下的代码在统一的命名空间下导入
foo_package/
spam/
blah.py
bar_package/
spam/
grok.py import sys
sys.path.extend(["foo_package","bar_package"])
import spam.blah
import spam.grok
在这两个目录中 spam作为公共的命名空间,注意这两个目录中都没有__init__.py文件。
6重新加载模块
开发环境中使用,尽量不在生产环境使用
import imp
import math
imp.reload(math)
7让目录或zip文件成为可运行的脚本
myapplication/
spam.py
bar.py
grok.py
__main__.py python myapplication 如果包含__main__.py文件,就可以当作脚本来运行,会运行__main__.py里的方法
8读取包中的数据文件
mypackage/
__init__.py
somedata.dat
spam.py import pkgutil
data = pkgutil.get_data(__package__,"somedata.dat") # data会得到一个字节串
9添加目录到sys.path中
三种解决方案,第一种是使用PYTHONPATH环境变量来添加。
env PYTHONPATH = /some/dir:/other/dir python3
第二种是通过创建.pth文件,将.pth文件放在python的site_packages
#mtapplication
/some/dir
/other/dir
第三种是硬编码到代码中
import sys
sys.path.insert(0,"/some/dir")
sys.path.insert(0,"/other/dir")
10使用字符串中给定的名称来导入模块
import importlib
math = importlib.import_module("math")
cookbook_模块和包的更多相关文章
- python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)
1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文 ...
- Python中函数、类、模块和包的调用
初学python阶段,大多数人对函数.类.模块和包的调用都搞得不是很清楚,这篇随笔就简单的进行说明. (1)函数 当函数定义好之后,可以直接调用. 比如:def summ(add1,add2),那么 ...
- Python模块和包
模块和包是python组织代码的基本方式. 模块: python的每一个脚本文件都可称之为模块,模块的名称就是脚本的文件名.例如当我们写了一个test.py的脚本文件,则可以在同目录下的另外一个脚本m ...
- python模块与包的导入
1. 模块与包的区别 模块,即module,一个包含python语句的.py文件就是一个模块!每个源代码文件都会自动成为模块!没有额外的语法用来声明模块. 包,又称模块包,即module packag ...
- python模块及包的导入
一.模块 通常模块为一个文件,直接使用import来导入就好了.可以作为module的文件类型有".py".".pyo".".pyc".&q ...
- 简述Python模块和包
我们常常会使用别人写的包,假如我们使用的是Python3.4版本,安装在windows的C盘根目录下,那么外部的包一般放在:C:\Python34\Lib\sit-packages下,此目录下有以.p ...
- python 深入模块和包
模块可以包含可执行语句以及函数的定义. 这些语句通常用于初始化模块. 它们只在 第一次 导入时执行.只在第一次导入的时候执行,第一次.妈蛋的第一次...后面再次导入就不执行了. [1](如果文件以脚本 ...
- Python中的模块与包
标准库的安装路径 在import模块的时候,python是通过系统路径找到这些模块的,我们可以将这些路径打印出来: >>> pprint.pprint(sys.path) ['', ...
- Python类、模块、包的区别
类 类的概念在许多语言中出现,很容易理解.它将数据和操作进行封装,以便将来的复用. 模块 模块,在Python可理解为对应于一个文件.在创建了一个脚本文件后,定义了某些函数和变量.你在其他需要这些功能 ...
随机推荐
- Spark之权威指南经典案例
hadoop权威指南上有一个求历史最高温度的经典案例,源数据如下: -- sample.txt0067011990999991950051507004+68750+023550FM-12+038299 ...
- C++程序设计2(侯捷video all)
一.转换函数Conversion function(video2) 一个类型的对象,使用转换函数可以转换为另一种类型的对象. 例如一个分数,理应该可以转换为一个double数,我们用以下转换函数来实现 ...
- 你需要知道的c# Timer 的垃圾回收机制。
通常我们需要定时执行一段任务的时候,我们就需要定时器,这时我们就可以使用c# System.Threading空间中的 Timer定时器;他是个异步定时器,时间到时每次都是在线程池中分配一个线程去执行 ...
- HTML end~
一.浏览器的兼容问题(关于浏览器的兼容问题 有很多大佬已经解释的很清楚了 这个得自己百度去多花点时间去了解 这里咱们只说一下前面的漏点) 浏览器兼容性问题又被称为网页兼容性或网站兼容性问题,指网页在各 ...
- Spring5深度源码分析(三)之AnnotationConfigApplicationContext启动原理分析
代码地址:https://github.com/showkawa/spring-annotation/tree/master/src/main/java/com/brian AnnotationCon ...
- Failed to start Docker Application Container Engine.
[root@dockertest ~]# systemctl status docker.service● docker.service - Docker Application Container ...
- 下一代工业通信—TSN(时间敏感网络),工业物联网的助推器
随着工业物联网(IIoT)的兴起和工业4.0的提出,越来越多的设计师.工程师和最终用户关注TSN(Time-Sensitive Networking,时间敏感网络).TSN为以太网提供确定性性能,本质 ...
- 2019.6.5 NOIP2014 day2 t2 寻找道路
我竟然一个人敲了NOIP提高组的t2? 题目描述 在有向图 G 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 路径上的所有点的出边所指向的点都直 ...
- archery 平台升级部署实践
v1.3.8 → v1.5.0 1.安装.升级python3 venv 环境 1.1.安装 python36 全新安装需要执行,升级安装可忽略 https://www.cnblogs.com/Davi ...
- Spring Boot 最流行的 16 条实践解读,你值得收藏!
Spring Boot是最流行的用于开发微服务的Java框架.在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践.这些内容是基于我的个人经验和一些熟知的Sp ...