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完成FizzBuzzWhizz问题(拉勾网面试题)示例
May 05 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
May 23 Python
对python读取CT医学图像的实例详解
Jan 24 Python
Python微医挂号网医生数据抓取
Jan 24 Python
解决Python3 被PHP程序调用执行返回乱码的问题
Feb 16 Python
详解python 爬取12306验证码
May 10 Python
如何运行带参数的python脚本
Nov 15 Python
django 文件上传功能的相关实例代码(简单易懂)
Jan 22 Python
Python列表操作方法详解
Feb 09 Python
Python装饰器的应用场景代码总结
Apr 10 Python
python模拟实现分发扑克牌
Apr 22 Python
Python使用Chrome插件实现爬虫过程图解
Jun 09 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
用Flash图形化数据(二)
2006/10/09 PHP
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
2011/07/23 PHP
11个PHPer必须要了解的编程规范
2014/09/22 PHP
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
JQuery下拉框应用示例介绍
2014/04/23 Javascript
javascript判断数组内是否重复的方法
2015/04/21 Javascript
js实现的早期滑动门菜单效果代码
2015/08/27 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
2016/07/12 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
JS中将多个逗号替换为一个逗号的实现代码
2017/06/23 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
利用jqprint插件打印页面内容的实现方法
2018/01/09 Javascript
JS实现的文件拖拽上传功能示例
2018/05/21 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
详解利用nodejs对本地json文件进行增删改查
2019/09/20 NodeJs
简单了解JavaScript sort方法
2019/11/25 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
2020/08/07 Javascript
如何在vue-cli中使用css-loader实现css module
2021/01/07 Vue.js
开源Web应用框架Django图文教程
2017/03/09 Python
利用matplotlib+numpy绘制多种绘图的方法实例
2017/05/03 Python
Python编程之gui程序实现简单文件浏览器代码
2017/12/08 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
英国儿童设计师服装的领先零售商:Base
2019/03/17 全球购物
中式面点餐厅创业计划书
2014/01/29 职场文书
优秀班集体获奖感言
2014/02/03 职场文书
2014年化验室工作总结
2014/11/21 职场文书
二年级语文下册复习计划
2015/01/19 职场文书
爱国主义影片观后感
2015/06/18 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
物业保洁员管理制度
2015/08/05 职场文书
python中pymysql包操作数据库方法
2022/04/19 Python