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中的ctime()方法使用教程
May 22 Python
python:socket传输大文件示例
Jan 18 Python
python opencv检测目标颜色的实例讲解
Apr 02 Python
Python简单实现网页内容抓取功能示例
Jun 07 Python
python画折线图的程序
Jul 26 Python
Python调用C++,通过Pybind11制作Python接口
Oct 16 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
Oct 29 Python
python爬虫模拟浏览器的两种方法实例分析
Dec 09 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
Jun 18 Python
python+opencv实现车道线检测
Feb 19 Python
Matlab使用Plot函数实现数据动态显示方法总结
Feb 25 Python
python分分钟绘制精美地图海报
Feb 15 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 变量类型的强制转换
2009/10/23 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
2018/05/23 PHP
javascript 面向对象编程 function也是类
2009/09/17 Javascript
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
Javascript数组的排序 sort()方法和reverse()方法
2012/06/04 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
2013/04/23 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
使用jquery清空、复位整个输入域
2015/04/02 Javascript
解析javascript中鼠标滚轮事件
2015/05/26 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
2020/04/20 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
对layui中table组件工具栏的使用详解
2019/09/19 Javascript
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
Python导出数据到Excel可读取的CSV文件的方法
2015/05/12 Python
Python输出9*9乘法表的方法
2015/05/25 Python
Python访问纯真IP数据库脚本分享
2015/06/29 Python
深入理解Python中的内置常量
2017/05/20 Python
Python之Scrapy爬虫框架安装及简单使用详解
2017/12/22 Python
Python之读取TXT文件的方法小结
2018/04/27 Python
python判断数字是否是超级素数幂
2018/09/27 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
python_opencv用线段画封闭矩形的实例
2018/12/05 Python
python挖矿算力测试程序详解
2019/07/03 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
《美丽的田园》教学反思
2014/03/01 职场文书
停车位租赁协议书
2014/09/24 职场文书
医药公司采购员岗位职责
2015/04/03 职场文书
导游词之杭州西湖
2019/09/19 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python