Python模块搜索概念介绍及模块安装方法介绍


Posted in Python onJune 03, 2015

【import模块】

和C中的#include不同,Python中的import语句并不是简单的把一个文件插入另外一个文件。
导入其实是运行时的运算,程序第一次导入指定文件时,会执行以下步骤,

1. 找到模块文件
2. 编译成位码
3. 执行模块中的代码来创建所定义的模块

并生成.pyc字节码文件,这三个步骤只在程序执行时,模块第一次导入时会进行。之后导入相同的模块时,会跳过这三个步骤,而只提取内存中已加载的模块对象,速度要快的多。
NOTE:

1. Python把已加载的模块放在内置的sys.modules字典中,在import操作开始时会确认引用的模块是否已加载。如果想看哪些模块已加载,可以导入sys,打印sys.modules.keys()

>>> sys.modules.keys()  

['heapq', 'functools', 'pyreadline.console.ansi',...,'pyreadline.modes'] 

2. 可以import的四种文件类型

1.源文件(.py)
2.字节码文件(.pyc)
3.C扩展文件(Windows: .dll或.pyd文件 | Linux: .so文件)
4.相同变量名的目录(用于包导入)

【搜索路径】

比如说:import math,不需要加路径和后缀名,系统会自动搜索路径,按照搜索先后顺序,列出模块搜索路径.

1. 程序的主目录(程序当前运行的目录)
2. PYTHONPATH目录(在环境变量里面配置与加到Path中一样)
3. 标准库目录(比如说: C:\Python27\Lib)
4. .pth文件所在内容(一般放在Lib\site-packages目录下,如下:easy-install.pth)

import sys; sys.__plen = len(sys.path)  

./setuptools-0.6c11-py2.7.egg  

./py-1.4.26-py2.7.egg  

./sphinx-1.3b1-py2.7.egg  

./colorama-0.3.2-py2.7.egg  

./babel-1.3-py2.7.egg  

./snowballstemmer-1.2.0-py2.7.egg  

./docutils-0.12-py2.7.egg  

./pygments-2.0.1-py2.7.egg  

./jinja2-2.7.3-py2.7.egg  

./six-1.8.0-py2.7.egg  

./pytz-2014.9-py2.7.egg  

./markupsafe-0.23-py2.7.egg  

./pyzmq-14.4.1-py2.7-win-amd64.egg  

./tornado-4.0.2-py2.7-win-amd64.egg  

./backports.ssl_match_hostname-3.4.0.2-py2.7.egg  

./certifi-14.05.14-py2.7.egg  

./egg-0.2.0-py2.7.egg  

./chicken-0.1.0-py2.7.egg  

import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new) 

而所有这些路径可以通过sys.path来看到

>>> import sys  

>>> sys.path  

['', 'C:\\Python27\\lib\\site-packages\\setuptools-0.6c11-py2.7.egg', ...,'C:\\Python27\\lib\\site-packages\\wx-3.0-msw'] 

临时的工作路径加载,可以用
>>> sys.path.append('d:\\test')  

>>> sys.path  

['', 'C:\\Python27\\lib\\site-packages\\setuptools-0.6c11-py2.7.egg', 'C:\\Python27\\lib\\, 'd:\\test']  

>>> sys.path.remove('d:\\test') 

【模块安装】

但上面的方法只是临时性的,一旦退出程序或当前交互环境,就失效。要想永久生效就必须让其加入到上述目录中
Perl的强大在于CPAN,可喜的是,Python也开始有类似的技术及功能,比如说pip,可以用包括pip来安装模块。

1. 自写模块,直接拷贝到上述任意目录
2. 第三方模块,执行python setup.py install安装
3. 用easy_install安装

下载ez_setup.py文件
执行: python ez_setup.py
安装所要安装的模块: easy_install py

4. 用pip安装

先用easy_install pip命令来安装pip
再用pip install Markdown来安装具体模块,假设模块名为: Markdown

5. 用第三方模块管理库(比如说Canopy就可以管理科学计算模块,可惜很多需要收费)

Python模块搜索概念介绍及模块安装方法介绍

用此工具,就可以安装ipython环境了

Python模块搜索概念介绍及模块安装方法介绍

Python 相关文章推荐
Python中使用logging模块打印log日志详解
Apr 05 Python
浅析Python中yield关键词的作用与用法
Nov 29 Python
PyQt 线程类 QThread使用详解
Jul 16 Python
python opencv 直方图反向投影的方法
Feb 24 Python
python 中if else 语句的作用及示例代码
Mar 05 Python
python实现小球弹跳效果
May 10 Python
python中enumerate() 与zip()函数的使用比较实例分析
Sep 03 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
Oct 12 Python
PyTorch 普通卷积和空洞卷积实例
Jan 07 Python
Python如何转换字符串大小写
Jun 04 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
Jul 14 Python
BeautifulSoup中find和find_all的使用详解
Dec 07 Python
Python使用ftplib实现简易FTP客户端的方法
Jun 03 #Python
Python中的深拷贝和浅拷贝详解
Jun 03 #Python
python下paramiko模块实现ssh连接登录Linux服务器
Jun 03 #Python
python处理二进制数据的方法
Jun 03 #Python
Python读写配置文件的方法
Jun 03 #Python
python操作ssh实现服务器日志下载的方法
Jun 03 #Python
Python实现建立SSH连接的方法
Jun 03 #Python
You might like
给php新手谈谈我的学习心得
2007/02/25 PHP
PHP读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
PHP滚动日志的代码实现
2015/06/10 PHP
php三元运算符知识汇总
2015/07/02 PHP
php array_merge_recursive 数组合并
2016/10/26 PHP
php如何利用pecl安装mongodb扩展详解
2019/01/09 PHP
php探针不显示内存解决方法
2019/09/17 PHP
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
javascript 基础篇1 什么是js 建立第一个js程序
2012/03/14 Javascript
jQuery .attr()和.removeAttr()方法操作元素属性示例
2013/07/16 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
2014/01/10 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
JQuery实现展开关闭层的方法
2015/02/17 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
2017/03/21 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
python导出chrome书签到markdown文件的实例代码
2017/12/27 Python
Django自定义过滤器定义与用法示例
2018/03/22 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
python3.7环境下安装Anaconda的教程图解
2019/09/10 Python
python sorted函数的小练习及解答
2019/09/18 Python
python中提高pip install速度
2020/02/14 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
巴西Mr. Cat在线商店:购买包包和鞋子
2019/09/08 全球购物
毕业证丢失证明
2014/01/15 职场文书
工作骂脏话检讨书
2014/10/05 职场文书
机关作风建设整改方案
2014/10/27 职场文书
小学生家长意见
2015/06/03 职场文书
python制作图形界面的2048游戏, 基于tkinter
2021/04/06 Python
详解Go与PHP的语法对比
2021/05/29 PHP