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的Django框架编写从Google Adsense中获得报表的应用
Apr 17 Python
Python tkinter模块中类继承的三种方式分析
Aug 08 Python
Python下调用Linux的Shell命令的方法
Jun 12 Python
python 实现语音聊天机器人的示例代码
Dec 02 Python
python实现对任意大小图片均匀切割的示例
Dec 05 Python
Python实现的排列组合、破解密码算法示例
Apr 12 Python
Python对象转换为json的方法步骤
Apr 25 Python
Python解压 rar、zip、tar文件的方法
Nov 19 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
Jun 14 Python
如何基于python实现年会抽奖工具
Oct 20 Python
Python使用PyYAML库读写yaml文件的方法
Apr 06 Python
Python绘制散点图之可视化神器pyecharts
Jul 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
深入理解用mysql_fetch_row()以数组的形式返回查询结果
2013/06/05 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
Laravel框架验证码类用法实例分析
2019/09/11 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
jQuery中的.bind()、.live()和.delegate()之间区别分析
2011/06/08 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
javascript伸缩型菜单实现代码
2015/11/16 Javascript
解决JS无法调用Controller问题的方法
2015/12/31 Javascript
使用plupload自定义参数实现多文件上传
2016/07/19 Javascript
Node.js包管理器Yarn的入门介绍与安装
2016/10/17 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
Express使用html模板的详细代码
2017/09/18 Javascript
深入理解js A*寻路算法原理与具体实现过程
2018/12/13 Javascript
自定义Vue中的v-module双向绑定的实现
2019/04/17 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
vue 导航锚点_点击平滑滚动,导航栏对应变化详解
2020/08/10 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
基于Cesium绘制抛物弧线
2020/11/18 Javascript
[02:41]DOTA2亚洲邀请赛小组赛第三日 赛事回顾
2015/02/01 DOTA
Hadoop中的Python框架的使用指南
2015/04/22 Python
python实现RSA加密(解密)算法
2016/02/17 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
2018/08/03 Python
Django REST framework视图的用法
2019/01/16 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
Django model class Meta原理解析
2020/11/14 Python
Waterford加拿大官方网站:世界著名的水晶杯品牌
2016/11/01 全球购物
美术师范毕业生自荐信
2013/11/16 职场文书
2015年教导处教学工作总结
2015/07/22 职场文书
学习焦裕禄先进事迹心得体会
2016/01/23 职场文书
Java无向树分析 实现最小高度树
2022/04/09 Javascript
Nginx反向代理、重定向
2022/04/13 Servers
解决springboot druid数据库连接失败后一直重连的方法
2022/04/19 Java/Android