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实现子类调用父类的方法
Nov 10 Python
Python global全局变量函数详解
Sep 18 Python
对python_discover方法遍历所有执行的用例详解
Feb 13 Python
selenium+PhantomJS爬取豆瓣读书
Aug 26 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
Feb 07 Python
Python基础之字符串常见操作经典实例详解
Feb 26 Python
django 实现手动存储文件到model的FileField
Mar 30 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
Jun 01 Python
matplotlib 画双轴子图无法显示x轴的解决方法
Jul 27 Python
python实现图片转字符画
Feb 19 Python
Python简易开发之制作计算器
Apr 28 Python
Python Flask实现进度条
May 11 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获取汉字的拼音(全部与首字母)
2013/06/27 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
2013/12/20 PHP
ThinkPHP模板判断输出Defined标签用法详解
2014/06/30 PHP
PHP工程师VIM配置分享
2015/12/15 PHP
简单实现php上传文件功能
2017/09/21 PHP
IE/FireFox具备兼容性的拖动代码
2007/08/13 Javascript
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
JS解决url传值出现中文乱码的另类办法
2013/04/08 Javascript
jQuery基础语法实例入门
2014/12/23 Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
2015/07/27 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
javascript事件处理模型实例说明
2016/05/31 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
实现vuex原理的示例
2020/10/21 Javascript
Zabbix实现微信报警功能
2016/10/09 Python
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
django使用xlwt导出excel文件实例代码
2018/02/06 Python
django实现模型字段动态choice的操作
2020/04/01 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
Python基于xlutils修改表格内容过程解析
2020/07/28 Python
Python自动登录QQ的实现示例
2020/08/28 Python
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
CSS3解析抖音LOGO制作的方法步骤
2019/04/11 HTML / CSS
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
新闻专业大学生找工作的自我评价
2013/10/30 职场文书
兼职业务员岗位职责
2014/01/01 职场文书
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
《一个小村庄的故事》教学反思
2014/04/13 职场文书
竞选副班长演讲稿
2014/04/24 职场文书
大班下学期个人总结
2015/02/13 职场文书
繁星春水读书笔记
2015/06/30 职场文书
SQLServer 日期函数大全(小结)
2021/04/08 SQL Server
mysql数据库如何转移到oracle
2022/12/24 MySQL