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读写ini配置文件方法实例分析
Jun 30 Python
Python打印斐波拉契数列实例
Jul 07 Python
python删除特定文件的方法
Jul 30 Python
Python读写txt文本文件的操作方法全解析
Jun 26 Python
python redis 批量设置过期key过程解析
Nov 26 Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
Feb 24 Python
Python根据字典的值查询出对应的键的方法
Sep 30 Python
Python生成pdf目录书签的实例方法
Oct 29 Python
python爬虫多次请求超时的几种重试方法(6种)
Dec 01 Python
python 实现的车牌识别项目
Jan 25 Python
python爬虫scrapy框架的梨视频案例解析
Feb 20 Python
如何用python识别滑块验证码中的缺口
Apr 01 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生成等比缩略图类和自定义函数分享
2014/06/25 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
2014/08/22 PHP
smarty模板引擎从php中获取数据的方法
2015/01/22 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
2017/03/15 PHP
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
CSS图片响应式 垂直水平居中
2015/08/14 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
jQuery.form插件的使用及跨域异步上传文件
2016/04/27 Javascript
JS解决iframe之间通信和自适应高度的问题
2016/08/24 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
echarts整合多个类似option的方法实例
2018/07/10 Javascript
小程序实现列表删除功能
2018/10/30 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
python利用装饰器进行运算的实例分析
2015/08/04 Python
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
Django中Middleware中的函数详解
2019/07/18 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
Django限制API访问频率常用方法解析
2020/10/12 Python
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
争先创优活动总结
2014/08/27 职场文书
个人反四风对照检查材料思想汇报
2014/09/23 职场文书
高中生逃课检讨书
2014/10/10 职场文书
个人先进事迹总结
2015/02/26 职场文书
社区工作者个人总结
2015/02/28 职场文书
2015年营业员工作总结
2015/04/23 职场文书
起诉书范文
2015/05/20 职场文书
2016七一建党节慰问信
2015/11/30 职场文书
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python