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的加密模块md5、sha、crypt使用实例
Sep 28 Python
Python实现扫描局域网活动ip(扫描在线电脑)
Apr 28 Python
Python的string模块中的Template类字符串模板用法
Jun 27 Python
python+selenium实现登录账户后自动点击的示例
Dec 22 Python
Python多线程应用于自动化测试操作示例
Dec 06 Python
python3实现zabbix告警推送钉钉的示例
Feb 20 Python
Django基础知识 web框架的本质详解
Jul 18 Python
浅析python redis的连接及相关操作
Nov 07 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
Feb 16 Python
python中@property的作用和getter setter的解释
Dec 22 Python
Python爬虫数据的分类及json数据使用小结
Mar 29 Python
这样写python注释让代码更加的优雅
Jun 02 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/01/23 PHP
php实现telnet功能示例
2014/04/08 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
2015/12/19 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
jquery的ajax请求全面了解
2013/03/20 Javascript
JS实现日期加减的方法
2013/11/29 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
JavaScript获取浏览器信息的方法
2015/11/20 Javascript
AngularJS实现全选反选功能
2015/12/08 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
2016/01/08 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
zTree树形插件异步加载方法详解
2017/06/14 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
vue.js语法及常用指令
2017/10/29 Javascript
移动端图片上传旋转、压缩问题的方法
2018/10/16 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
vue实现条件叠加搜索的解决方法
2019/05/28 Javascript
解决vue props传Array/Object类型值,子组件报错的情况
2020/11/07 Javascript
Python xlrd excel文件操作代码实例
2020/03/10 Python
PyCharm中配置PySide2的图文教程
2020/06/18 Python
Python selenium模块实现定位过程解析
2020/07/09 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
巧用 CSS3的webkit-box-reflect 倒影实现各类动效
2021/03/05 HTML / CSS
Wiggle美国:英国骑行、跑步、游泳、铁人三项商店
2018/10/27 全球购物
市场营销专业推荐信
2013/11/03 职场文书
个人党性剖析材料
2014/02/03 职场文书
信访工作经验交流材料
2014/05/23 职场文书
相亲活动方案
2014/08/26 职场文书
小学教师暑期培训方案
2014/08/28 职场文书
环卫工作汇报材料
2014/10/28 职场文书
个人汇报材料范文
2014/12/30 职场文书
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android