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_模块和包的更多相关文章

  1. python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)

    1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文 ...

  2. Python中函数、类、模块和包的调用

    初学python阶段,大多数人对函数.类.模块和包的调用都搞得不是很清楚,这篇随笔就简单的进行说明. (1)函数 当函数定义好之后,可以直接调用. 比如:def summ(add1,add2),那么 ...

  3. Python模块和包

    模块和包是python组织代码的基本方式. 模块: python的每一个脚本文件都可称之为模块,模块的名称就是脚本的文件名.例如当我们写了一个test.py的脚本文件,则可以在同目录下的另外一个脚本m ...

  4. python模块与包的导入

    1. 模块与包的区别 模块,即module,一个包含python语句的.py文件就是一个模块!每个源代码文件都会自动成为模块!没有额外的语法用来声明模块. 包,又称模块包,即module packag ...

  5. python模块及包的导入

    一.模块 通常模块为一个文件,直接使用import来导入就好了.可以作为module的文件类型有".py".".pyo".".pyc".&q ...

  6. 简述Python模块和包

    我们常常会使用别人写的包,假如我们使用的是Python3.4版本,安装在windows的C盘根目录下,那么外部的包一般放在:C:\Python34\Lib\sit-packages下,此目录下有以.p ...

  7. python 深入模块和包

    模块可以包含可执行语句以及函数的定义. 这些语句通常用于初始化模块. 它们只在 第一次 导入时执行.只在第一次导入的时候执行,第一次.妈蛋的第一次...后面再次导入就不执行了. [1](如果文件以脚本 ...

  8. Python中的模块与包

    标准库的安装路径 在import模块的时候,python是通过系统路径找到这些模块的,我们可以将这些路径打印出来: >>> pprint.pprint(sys.path) ['', ...

  9. Python类、模块、包的区别

    类 类的概念在许多语言中出现,很容易理解.它将数据和操作进行封装,以便将来的复用. 模块 模块,在Python可理解为对应于一个文件.在创建了一个脚本文件后,定义了某些函数和变量.你在其他需要这些功能 ...

随机推荐

  1. orale数据库to_char时间中英文转换

    一.显示中文星期天 select to_char(sysdate,'day','NLS_DATE_LANGUAGE=''SIMPLIFIED CHINESE''') from dual; 二.显示英文 ...

  2. 系统学习 Java IO (十五)----字符读写 Reader/Writer 其他子类

    目录:系统学习 Java IO---- 目录,概览 跟踪行号的缓冲字符输入流 LineNumberReader LineNumberReader 类是一个 BufferedReader ,用于跟踪读取 ...

  3. PHP输出缓冲及其应用

    缓冲(buffer)是为了协调吞吐速度相差很大的设备之间数据传送而采用的技术,用来存放缓冲数据的区域叫缓冲区,在计算机科学领域,当数据从一个地方传送到另一个地方时,缓冲区被用来临时存储数据.与缓冲相似 ...

  4. iOS开发系列之性能优化(上)

    本篇主要记录一下我对界面优化上的一些探索.关于时间优化的探索将会在中篇里进行介绍.下篇将主要介绍一些耗电优化.安装包瘦身的探索. ### 1.卡顿原理 要了解卡顿原理,需要对帧缓冲区.垂直同步.CPU ...

  5. ECS通过mail发送邮件

    发送邮件报错,因为新购实例默认对外访问25端口封禁状态,建议使用加密465端口 1.配置mailx [root@wiki ~]# yum install -y mailx ##yum安装完mailx之 ...

  6. 玲珑OJ 1083:XJT Love Digits(离线处理+哈希)

    http://www.ifrog.cc/acm/problem/1083 题意:比较好懂.注意答案的x不包含ax本身,所以才输出-1. 思路:离线处理.根据x排序,然后每次更新Hash[]数组就好了. ...

  7. MQ初窥门径【面试必看的Kafka和RocketMQ存储区别】

    MQ初窥门径 全称(message queue)消息队列,一个用于接收消息.存储消息并转发消息的中间件 应用场景 用于解决的场景,总之是能接收消息并转发消息 用于异步处理,比如A服务做了什么事情,异步 ...

  8. C++学习书籍推荐《C++ Concurrency in Action》下载

    百度云及其他网盘下载地址:点我 目录 Hello, world of concurrency in C++! Managing threads Sharing data between threads ...

  9. 开源SFTP客户端 WinSCP v5.13.5 Build 8967 绿色便携版

    下载地址:点我 基本介绍 WinSCP 是一款可以在微软 Windows 系统环境下使用的支持 SSH 命令的开源图形化 SFTP 客户端工具.同时也支持 SCP 文件传输协议,它的主要功能是在本地与 ...

  10. 哈工大计算机网络Week3-传输层

    目录 学习目标 传输层服务概述 传输层服务和协议 传输层 vs. 网络层 Internet传输层协议 多路复用和多路分用 多路复用/分用 分用如何工作? 无连接分用(UDP) 面向连接的分用 面向连接 ...