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发送邮件功能实现代码
Jul 15 Python
python交互式图形编程实例(三)
Nov 17 Python
python 3.6.5 安装配置方法图文教程
Sep 18 Python
python 二维数组90度旋转的方法
Jan 28 Python
scrapy-redis的安装部署步骤讲解
Feb 27 Python
Python实现的矩阵转置与矩阵相乘运算示例
Mar 26 Python
Matplotlib中%matplotlib inline如何使用
Jul 28 Python
Python Opencv实现单目标检测的示例代码
Sep 08 Python
python时间time模块处理大全
Oct 25 Python
如何使用 Flask 做一个评论系统
Nov 27 Python
pandas针对excel处理的实现
Jan 15 Python
浅谈怎么给Python添加类型标注
Jun 08 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程序员的技术瓶颈分析
2011/07/17 PHP
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
解析PHP汉字转换拼音的类
2013/06/18 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
2015/11/30 PHP
JS 判断代码全收集
2009/04/28 Javascript
jquery EasyUI的formatter格式化函数代码
2011/01/12 Javascript
jQuery基础框架浅入剖析
2012/12/27 Javascript
javascript中call apply 的应用场景
2015/04/16 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
2017/02/11 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
不得不知的ES6小技巧
2018/07/28 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
Python 爬虫多线程详解及实例代码
2016/10/08 Python
Python中 map()函数的用法详解
2018/07/10 Python
python 获取utc时间转化为本地时间的方法
2018/12/31 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
2019/08/10 Python
关于Python中的向量相加和numpy中的向量相加效率对比
2019/08/26 Python
python+mysql实现个人论文管理系统
2019/10/25 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
对python pandas中 inplace 参数的理解
2020/06/27 Python
Kidsroom台湾:来自德国的婴儿用品
2017/12/11 全球购物
世界排名第一的万圣节服装店:Spirit Halloween
2018/10/16 全球购物
Nordgreen美国官网:在线购买极简主义斯堪的纳维亚手表
2019/07/24 全球购物
JSF界面控制层技术
2013/06/17 面试题
回门宴答谢词
2014/01/13 职场文书
公司贷款承诺书
2014/05/30 职场文书
领导干部失职检讨书
2015/05/05 职场文书
参加招聘会后的感想
2015/08/10 职场文书
《女娲补天》读后感5篇
2019/12/31 职场文书
postgresql无序uuid性能测试及对数据库的影响
2021/06/11 PostgreSQL
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android
Win11 BitLocker 驱动器加密
2022/04/19 数码科技