python学习笔记5.1-理解模块和包
2016-12-08 14:56
330 查看
python 是面向对象的编程语言,那么其包含的所有元素都是对象,包括模块和包。包和模块其实都是功能的集合体,只是包的功能更多,包含了很多模块。也就是说包和模块是包含关系。
1) 当前程序的主目录,也就是你运行程序的目录。
2) PYTHONPATH环境变量里包含的目录,并不是系统环境变量目录。
3) 标准库目录。
4) .pth文件目录。
对于1)和3)都是系统自动生成的,2)和4)用于用户自定义扩展搜索路径。
有了以上知识的了解,一般出现“ImportError: No module named ‘…’”的异常,肯定是因为该module的路径没有被包含,在主程序中用sys.path.append()函数添加该module的路径就能解决。
1) 可以把要调用的模块的.py文件复制到运行目录的下面。
2) 将模块目录添加到系统环境标量中的PYTHONPATH中
3) 用函数sys.path.append(‘…’)添加
4) 添加.pth文件。
在site-packages添加一个路径文件,如mypkpath.pth,必须以.pth为后缀,写上你要加入的模块文件所在的目录名称就是了。
1 windows: c:\python27\site-packages,把pth文件直接放在c:\python27(或其他python安装目录)目录下测试也是有效的
2 linux(ubuntu)
/usr/local/lib/python2.7/dist-packages (note by shanql, 我是放在这个目录下有效的,所添加的目录一定要存在,不存在则会不成功)
3 linux(redhat)
/usr/lib/python2.7/site-packages
A即为包的名称,也是文件夹的名称,可以看出python是以名称空间来索引的。file1.py和file2.py是两个功能模块。init.py文件是必须存在的,但是它的内容可以为空,也就是可以创建一个空文件即可,当然也可以巧妙的使用init.py文件,使自己的代码更加简洁,方便。
当然,包的文件目录中还可以包含包,但是init.py文件是必须存在的。
这里模块名称是可以重复的(最好不这么做),因为在导入包的时候会有包名的名称空间,因而导入的时候会使用包名的名称空间,例如:
包的导入以及其他一些高级操作以后慢慢详细说明。
1. 模块
在python中可以将模块理解为一个包含了特定功能的类、函数、变量的文件,它与其他的python脚本文件也没有什么区别,文件类型也是.py文件,模块名就是该文件名。因而,模块也不具有特别的定义方式,只需要能在路径中搜索到就好。1.1 模块搜索路径
当python调用模块的时候,首先它要知道去哪儿搜索,python模块的搜索路径有:1) 当前程序的主目录,也就是你运行程序的目录。
2) PYTHONPATH环境变量里包含的目录,并不是系统环境变量目录。
3) 标准库目录。
4) .pth文件目录。
对于1)和3)都是系统自动生成的,2)和4)用于用户自定义扩展搜索路径。
有了以上知识的了解,一般出现“ImportError: No module named ‘…’”的异常,肯定是因为该module的路径没有被包含,在主程序中用sys.path.append()函数添加该module的路径就能解决。
1.2 将文件路径添加到搜索路径
由1.1可以知道路径的位置,所以添加路径的方法与1.1中的4条对应。1) 可以把要调用的模块的.py文件复制到运行目录的下面。
2) 将模块目录添加到系统环境标量中的PYTHONPATH中
3) 用函数sys.path.append(‘…’)添加
4) 添加.pth文件。
在site-packages添加一个路径文件,如mypkpath.pth,必须以.pth为后缀,写上你要加入的模块文件所在的目录名称就是了。
1 windows: c:\python27\site-packages,把pth文件直接放在c:\python27(或其他python安装目录)目录下测试也是有效的
2 linux(ubuntu)
/usr/local/lib/python2.7/dist-packages (note by shanql, 我是放在这个目录下有效的,所添加的目录一定要存在,不存在则会不成功)
3 linux(redhat)
/usr/lib/python2.7/site-packages
2. 包(库)
通常来说,一个包就是一个包含有许多模块(.py文件)的目录,在构建包的时候,包里的模块的功能应该关系密切,这样有利于包的维护和使用。包的文件结构层次应该包含:A/ __init__.py file1.py file2.py
A即为包的名称,也是文件夹的名称,可以看出python是以名称空间来索引的。file1.py和file2.py是两个功能模块。init.py文件是必须存在的,但是它的内容可以为空,也就是可以创建一个空文件即可,当然也可以巧妙的使用init.py文件,使自己的代码更加简洁,方便。
当然,包的文件目录中还可以包含包,但是init.py文件是必须存在的。
A/ __init__.py sub_a/ __init__.py file1.py file2.py sub_b/ __init__.py file1.py file2.py sub_c/ __init__.py file1.py file2.py
这里模块名称是可以重复的(最好不这么做),因为在导入包的时候会有包名的名称空间,因而导入的时候会使用包名的名称空间,例如:
from A import sub_a from A import sub_b 使用的时候: sub_a.file1 和sub_b.file1是不一样的
包的导入以及其他一些高级操作以后慢慢详细说明。
相关文章推荐
- [转载]Python学习笔记三(常用模块)
- Python2.7 学习笔记 (二)—— 函数,模块,正则
- Python学习笔记五(Python urllib模块)
- python学习笔记——3_模块
- python 学习笔记10-----模块
- python 常用代码学习笔记之commands模块
- Python 学习笔记 - 11.模块(Module)
- Python 学习笔记 (4)—— 模块
- Python学习笔记(十四):模块高级
- Python 学习笔记 (7)—— OS模块
- python学习笔记——模块和命名空间
- python学习笔记16-各种模块和开放工具收集整理
- Python学习笔记---模块;文件与文本处理
- python email模块学习笔记
- Python学习笔记--正则表达式,re模块
- Python学习笔记总结(二):函数和模块
- python学习笔记7-模块整理
- 学习python笔记——模块
- Python学习笔记----模块
- python学习笔记之九:模块和包