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读取键盘输入的2种方法
Jun 16 Python
Python 装饰器深入理解
Mar 16 Python
Python双精度浮点数运算并分行显示操作示例
Jul 21 Python
selenium+python实现1688网站验证码图片的截取功能
Aug 14 Python
Python实现的简单计算器功能详解
Aug 25 Python
django最快程序开发流程详解
Jul 19 Python
python随机生成库faker库api实例详解
Nov 28 Python
Python获取对象属性的几种方式小结
Mar 12 Python
python Django 反向访问器的外键冲突解决
May 20 Python
python的scipy.stats模块中正态分布常用函数总结
Feb 19 Python
如何用python插入独创性声明
Mar 31 Python
Python基础之元类详解
Apr 29 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连接mysql数据库代码
2009/03/10 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
2013/05/07 PHP
JS版网站风格切换实例代码
2008/10/06 Javascript
javascript 有用的脚本函数
2009/05/07 Javascript
jQuery 获取URL的GET参数值的小例子
2013/04/18 Javascript
js中AppendChild与insertBefore的用法详细解析
2013/12/16 Javascript
JQUERY 设置SELECT选中项代码
2014/02/07 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
vue实现通讯录功能
2018/07/14 Javascript
vue如何限制只能输入正负数及小数
2019/07/04 Javascript
解决layer弹出层的内容页点击按钮跳转到新的页面问题
2019/09/14 Javascript
前端深入理解Typescript泛型概念
2020/03/09 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
Python内置函数之filter map reduce介绍
2014/11/30 Python
Python中使用PDB库调试程序
2015/04/05 Python
在Python的struct模块中进行数据格式转换的方法
2015/06/17 Python
对numpy中布尔型数组的处理方法详解
2018/04/17 Python
python 爬取疫情数据的源码
2020/02/09 Python
Python实现GIF图倒放
2020/07/16 Python
HTML5教程之html 5 本地数据库(Web Sql Database)
2014/04/03 HTML / CSS
美国新蛋IT数码商城:Newegg.com
2016/07/21 全球购物
Boston Proper官网:美国女装品牌
2017/10/30 全球购物
Hello Molly美国:女性时尚在线
2019/08/26 全球购物
毕业生实习鉴定
2013/12/11 职场文书
幼儿园实习自我鉴定
2013/12/15 职场文书
工资收入证明
2014/10/07 职场文书
2016年会开场白台词
2015/06/01 职场文书
浅谈node.js中间件有哪些类型
2021/04/29 Javascript
在python中实现导入一个需要传参的模块
2021/05/12 Python
MySQL完整性约束的定义与实例教程
2021/05/30 MySQL
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android