详解Python编程中包的概念与管理


Posted in Python onOctober 16, 2015

Python中的包
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的Python的应用环境。
考虑一个在Phone目录下的pots.py文件。这个文件有如下源代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
def Pots():
  print "I'm Pots Phone"

  
同样地,我们有另外两个保存了不同函数的文件:

  • Phone/Isdn.py 含有函数Isdn()
  • Phone/G3.py 含有函数G3()

现在,在Phone目录下创建file __init__.py:

Phone/__init__.py

当你导入Phone时,为了能够使用所有函数,你需要在__init__.py里使用显式的导入语句,如下:

from Pots import Pots
from Isdn import Isdn
from G3 import G3

当你把这些代码添加到__init__.py之后,导入Phone包的时候这些类就全都是可用的了。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 导入 Phone 包
import Phone
 
Phone.Pots()
Phone.Isdn()
Phone.G3()

以上实例输出结果:

I'm Pots Phone
I'm 3G Phone
I'm ISDN Phone

如上,为了举例,我们只在每个文件里放置了一个函数,但其实你可以放置许多函数。你也可以在这些文件里定义Python的类,然后为这些类建一个包。

Python的包管理工具

Distribute是对标准库disutils模块的增强,我们知道disutils主要是用来更加容易的打包和分发包,特别是对其他的包有依赖的包。
Distribute被创建是因为Setuptools包不再维护了。
安装Distribute
可以通过distribute_setup.py 脚本来安装Distribute,也可以通过easy_install, pip,源文件来安装,不过使用distribute_setup.py来安装是最简单和受欢迎的方式

$ curl -0 http://python-distribute.org/distribute_setup.py
$ sudo python distribute_setup.py

 
Pip 是安装python包的工具,提供了安装包,列出已经安装的包,升级包以及卸载包的功能。
Pip 是对easy_install的取代,提供了和easy_install相同的查找包的功能,因此可以使用easy_install安装的包也同样可以使用pip进行安装。
 
安装Pip
Pip的安装可以通过源代码包,easy_install或者脚本。
下面介绍一下各种安装方法:
源代码方式:

$ wget http://pypi.python.org/packages/source/p/pip/pip-0.7.2.tar.gz (替换为最新的包)
$ tar xzf pip-0.7.2.tar.gz
$ cd pip-0.7.2
$ python setup.py install
easy_install:
$ easy_install pip

get_pip.py 脚本:

$ curl -0 https://raw.github.com/pypa/pip/master/contrib/get-pip.py
$ sudo python get-pip.py

 
OK, 下面来看一下Pip的使用
安装package

$ pip install Markdown

列出安装的packages

$ pip freeze

安装特定版本的package
通过使用==, >=, <=, >, <来指定一个版本号。

$ pip install 'Markdown<2.0'
$ pip install 'Markdown>2.0,<2.0.3'

升级包
升级包到当前最新的版本,可以使用-U 或者 --upgrade

$ pip install -U Markdown

卸载包

$ pip uninstall Markdown

查询包

pip search "Markdown"

 
PS -- 包安装后的py文件路径:

/usr/local/lib/python2.7/dist-packages
Python 相关文章推荐
python获取本机mac地址和ip地址的方法
Apr 29 Python
Django日志模块logging的配置详解
Feb 14 Python
Python 专题四 文件基础知识
Mar 20 Python
Pycharm导入Python包,模块的图文教程
Jun 13 Python
python实现图片批量压缩程序
Jul 23 Python
Python 使用PIL中的resize进行缩放的实例讲解
Aug 03 Python
python 2.7.13 安装配置方法图文教程
Sep 18 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
May 22 Python
Python小白垃圾回收机制入门
Jun 09 Python
Python图像处理二值化方法实例汇总
Jul 24 Python
Python实例教程之检索输出月份日历表
Dec 16 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
Aug 23 Python
解读Python编程中的命名空间与作用域
Oct 16 #Python
Python中的模块导入和读取键盘输入的方法
Oct 16 #Python
Python中基本的日期时间处理的学习教程
Oct 16 #Python
简单介绍使用Python解析并修改XML文档的方法
Oct 15 #Python
Python中将字典转换为XML以及相关的命名空间解析
Oct 15 #Python
详细解读Python中解析XML数据的方法
Oct 15 #Python
深入解析Python编程中JSON模块的使用
Oct 15 #Python
You might like
php discuz 主题表和回帖表的设计
2009/03/13 PHP
php设计模式 Command(命令模式)
2011/06/26 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
CI框架的安全性分析
2016/05/18 PHP
对PHP依赖注入的理解实例分析
2016/10/09 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
2017/08/01 PHP
由JavaScript中call()方法引发的对面向对象继承机制call的思考
2011/09/12 Javascript
JS在textarea光标处插入文本的小例子
2013/03/22 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
2015/07/03 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
解析javascript瀑布流原理实现图片滚动加载
2016/03/10 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
关于React动态加载路由处理的相关问题
2019/01/07 Javascript
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python爬虫将爬取的图片写入world文档的方法
2018/11/07 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
Python变量访问权限控制详解
2019/06/29 Python
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
2020/11/10 HTML / CSS
应届毕业生个人自我评价
2013/09/20 职场文书
会计与审计专业大专生求职信
2013/10/03 职场文书
给同学的道歉信
2014/01/16 职场文书
时尚休闲吧创业计划书
2014/01/25 职场文书
统计学教授推荐信
2014/09/18 职场文书
工程部主管岗位职责
2015/02/12 职场文书
2015年学校食堂工作总结
2015/04/22 职场文书
2015年团委副书记工作总结
2015/07/23 职场文书
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫