详解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类的基础入门知识
Nov 24 Python
Python2中的raw_input() 与 input()
Jun 12 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
Jun 23 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
Dec 11 Python
python求最大连续子数组的和
Jul 07 Python
在Pycharm中项目解释器与环境变量的设置方法
Oct 29 Python
Python利用sqlacodegen自动生成ORM实体类示例
Jun 04 Python
python银行系统实现源码
Oct 25 Python
Python如何存储数据到json文件
Mar 09 Python
Python代码注释规范代码实例解析
Aug 14 Python
python如何快速拼接字符串
Oct 28 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
Nov 18 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
浅析ThinkPHP的模板输出功能
2014/07/01 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
2016/03/07 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
YII Framework框架教程之缓存用法详解
2016/03/14 PHP
PHP实现获取并生成数据库字典的方法
2016/05/04 PHP
laravel自定义分页效果
2017/07/23 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
jQuery获得内容和属性示例代码
2014/01/16 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
node.js中实现kindEditor图片上传功能的方法教程
2017/04/26 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
JQuery属性操作与循环用法示例
2019/05/15 jQuery
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
使用Protocol Buffers的C语言拓展提速Python程序的示例
2015/04/16 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
使用python绘制3维正态分布图的方法
2018/12/29 Python
Python 实现将数组/矩阵转换成Image类
2020/01/09 Python
区分python中的进程与线程
2020/08/13 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
css3实现可拖动的魔方3d效果
2019/05/07 HTML / CSS
html5新增的定时器requestAnimationFrame实现进度条功能
2018/12/13 HTML / CSS
html5 迷宫游戏(碰撞检测)实例一
2013/07/25 HTML / CSS
自荐信格式技巧有哪些呢
2013/11/19 职场文书
主题班会演讲稿
2014/05/22 职场文书
教师党员学习群众路线心得体会
2014/11/04 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
JavaScript 定时器详情
2021/11/11 Javascript
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL