详解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设置windows桌面壁纸的实现代码
Jan 28 Python
python在命令行下使用google翻译(带语音)
Jan 16 Python
python实现ping的方法
Jul 06 Python
Python 数据结构之旋转链表
Feb 25 Python
Python for循环生成列表的实例
Jun 15 Python
Windows下Anaconda2安装NLTK教程
Sep 19 Python
python实现简单的文字识别
Nov 27 Python
计算Python Numpy向量之间的欧氏距离实例
May 22 Python
Tensorflow tensor 数学运算和逻辑运算方式
Jun 30 Python
如何基于Python和Flask编写Prometheus监控
Nov 25 Python
python des,aes,rsa加解密的实现
Jan 16 Python
虚拟环境及venv和virtualenv的区别说明
Feb 05 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 危险函数解释 分析
2009/04/22 PHP
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
PHP通过header实现文本文件下载的代码
2010/08/08 PHP
ThinkPHP实现事务回滚示例代码
2014/06/23 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
2014/10/15 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
详解php中反射的应用
2016/03/15 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
数组任意位置插入元素,删除特定元素的实例
2017/03/02 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
JQUERY的属性选择符和自定义选择符使用方法(二)
2011/04/07 Javascript
js 通用订单代码
2013/12/23 Javascript
jquery禁用右键示例
2014/04/28 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
封装好的一个万能检测表单的方法
2015/01/21 Javascript
分享一则JavaScript滚动条插件源码
2015/03/03 Javascript
jQuery Easyui datagrid editor为combobox时指定数据源实例
2016/12/19 Javascript
详解Angular2 关于*ngFor 嵌套循环
2017/05/22 Javascript
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
python正则分组的应用
2013/11/10 Python
python自动zip压缩目录的方法
2015/06/28 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
用django设置session过期时间的方法解析
2019/08/05 Python
python重要函数eval多种用法解析
2020/01/14 Python
Python classmethod装饰器原理及用法解析
2020/10/17 Python
Django集成MongoDB实现过程解析
2020/12/01 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
学期自我评价
2014/01/27 职场文书
航空学院求职信
2014/06/11 职场文书
学校工作推荐信范文
2014/07/11 职场文书
就业协议书范本
2014/10/08 职场文书
新学期小学班主任工作计划
2019/06/21 职场文书
php中pcntl_fork详解
2021/04/01 PHP
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2022/07/07 Java/Android