python基础——第10章 模块和标准库

10.1.1

要告诉解释器去哪里查找这个模块,可执行如下命令(以Windows目录为例):

>>> import sys 
>>> sys.path.append('C:/python') 

如果一定要重新加载模块,可使用模块importlib中的函数reload,它接受一个参数(要重新加载的模块),并返回重新加载的模块。如果在程序运行时修改了模块,并希望这种修改反映到程序中,这将很有用。

10.1.3 让模块可用

Python打包技术一度日益复杂、各自为政,尽管现已被Python Packaging Authority控制并简化,但需要学习的还是有很多。这里不深入介绍这个棘手的主题,建议参阅“Python打包用户指南”:packaging.python.org

  1. 将模块放在正确的位置
    将模块放在正确的位置很容易,只需找出Python解释器到哪里去查找模块,再将文件放在这个地方即可。
# 你可能还记得,可在模块sys的变量path中找到目录列表(即搜索路径)。 
>>> import sys, pprint 
>>> pprint.pprint(sys.path)  
['C:\\Python35\\Lib\\idlelib', 
 'C:\\Python35', 
 'C:\\Python35\\DLLs', 
 'C:\\Python35\\lib', 
 'C:\\Python35\\lib\\plat-win', 
 'C:\\Python35\\lib\\lib-tk', 
 'C:\\Python35\\lib\\site-packages'] 

提示 如果要打印的数据结构太大,一行容纳不下,可使用模块pprint中的函数pprint(而不是普通print语句)。pprint是个卓越的打印函数,能够更妥善地打印输出。
虽然放在这里显示的任何一个位置中都可行,但目录site-packages是最佳的选择,因为它就是用来放置模块的。
2. 告诉解释器到哪里去查找
如果将模块放在其他地方,就必须告诉解释器到哪里去查找。前面说过,要告诉解释器到哪里去查找模块,办法之一是直接修改sys.path,但这种做法不常见。标准做法是将模块所在的目录包含在环境变量PYTHONPATH中。
环境变量PYTHONPATH的内容随操作系统而异(参见旁注“环境变量”),但它基本上类似于sys.path,也是一个目录列表。

10.1.4 包

为组织模块,可将其编组为包(package)。包其实就是另一种模块,但有趣的是它们可包含其他模块。模块存储在扩展名为.py的文件中,而包则是一个目录。要被Python视为包,目录必须包含文件__init__.py。如果像普通模块一样导入包,文件__init__.py的内容就将是包的内容。

表10-1 一种简单的包布局
文件/目录 描 述
~/python/ PYTHONPATH中的目录
~/python/drawing/ 包目录(包drawing)
~/python/drawing/init.py 包代码(模块drawing)
~/python/drawing/colors.py 模块colors
~/python/drawing/shapes.py 模块shapes

完成这些准备工作后,下面的语句都是合法的:

import drawing    # (1) 导入drawing包 
import drawing.colors   # (2) 导入drawing包中的模块colors 
from drawing import shapes   # (3) 导入模块shapes 

执行第1条语句后,便可使用目录drawing中文件__init__.py的内容,但不能使用模块shapes和colors的内容。执行第2条语句后,便可使用模块colors,但只能通过全限定名drawing.colors来使用。执行第3条语句后,便可使用简化名(即shapes)来使用模块shapes。请注意,这些语句只是示例,并不用像这里做的那样,先导入包再导入其中的模块。换而言之,完全可以只使用第2条语句,第3条语句亦如此。

猜你喜欢

转载自blog.csdn.net/acktomas/article/details/84779854