定义1:python中什么是模块? 答:模块就是一个.py文件,每一个以py作为后缀的文件,都是一个模块。

定义2:Python中什么是包? 答:包是一类特殊的模块,他能包含其他模块,为了更好的组织模块而出现,称为包。需要注意的是,希望python认为这个模块是包的话,这个模块必须包含一个名为__init__.py的模块。假设包名为package,import package时,首先会执行—__init__.py中的内容

《Python基础教程》对于第十章“自带电池”中对于模块介绍的标题为

- 模块是程序(代表导入模块时会执行模块的内容,相当于执行了一段程序)

- 模块用于定义(代表可以在模块中定义变量和函数,可以加强代码重用)

- 让你的模块可用(后面详细讲解,会有扩展,主要内容)

sys.path - 寻找模块时的搜索路径

python处理模块有一定的机制,模块的搜索路径存储在sys.path中,通过打印该变量,我们可以看到一些内容,例如我的是:

>>> import sys, pprint
>>> pprint.pprint(sys.path)
['',
'D:\\anaconda\\python27.zip',
'D:\\anaconda\\DLLs',
'D:\\anaconda\\lib',
'D:\\anaconda\\lib\\plat-win',
'D:\\anaconda\\lib\\lib-tk',
'D:\\anaconda',
'D:\\anaconda\\lib\\site-packages',
'D:\\anaconda\\lib\\site-packages\\Sphinx-1.5.1-py2.7.egg',
'D:\\anaconda\\lib\\site-packages\\thrift-0.10.0-py2.7.egg',
'D:\\anaconda\\lib\\site-packages\\win32',
'D:\\anaconda\\lib\\site-packages\\win32\\lib',
'D:\\anaconda\\lib\\site-packages\\Pythonwin',
'D:\\anaconda\\lib\\site-packages\\setuptools-27.2.0-py2.7.egg']

每个人的sys.path都不太相同,这取决于你的python安装方式,由于我是使用anaconda进行安装的,所以很多路径与anaconda相关。需要稍微强调的是

- lib和site-packages,一般的模块都在这里能够找到,使用pip进行安装的时候,大多数也是进入site-packages目录下。因此为了让你的模块可用,可以尝试把你的模块放在这些目录下面。

- 模块的搜索过程是从sys.path中遍历搜索是否存在该模块,找到第一个就直接返回,因此同名模块有可能在搜索过程中被覆盖。这也是为什么当前路径总是在sys.path第一个位置的原因。如果本地统计目录定义了一个模块,搜索时会第一个从本地搜索到。

导入自定义模块的一般方法

除了专门开发python模块的人,我们在使用python时,不会把模块都写在sys.path中系统指定的那些位置,未免有些太麻烦了。我们会有自己的working directory,所有的模块都在这里。如何在这种情况下导入模块。下面分几种情况进行分析。

我的本地文件结构:

- 导入同级目录下的模块

  例如,从parent_module.py 中导入parent_module2.py,只需要 import parent_module2.py

# content in parent_module.py file
name = 'parent_module'
print 'I am', name
import parent_module2 # content in parent_module2.py file
name = 'parent_module2'
print 'I am', name

  执行 python parent_module.py 得到:

PS E:\workspace_vs\import_test> python .\parent_module.py
I am parent_module
I am parent_module2

- 导入子级目录下的模块

  也很简单,例如从parent_module.py中导入pson_module.py,只需要 import parent_package.pson_module.py

# content in parent_module.py
name = 'parent_module'
print 'I am', name
import parent_package.pson_module # content in parent_package.pson_module.py
name = 'pson_module'
print 'I am', name

  执行 python parent_module.py 得到:

PS E:\workspace_vs\import_test> python .\parent_module.py
I am parent_module
I am pson_module

- 导入父级目录下的模块

  这个就有点意思了,先说正确的方式,为了让系统搜索到父级的模块,首先需要找到父级目录的地址,一行代码sys.path.append('..')

  但是注意:上面append('..')方法将上级目录加入path中,但是这个上级是相对于谁呢?应该是python的working directory,所以想要保证正确执行需要直接python .\parent_module.py,而不能再其它路径执行该文件

  另外,执行一个python文件的时候,无论working directory是哪里,都会把该python文件(模块)所在的目录添加在sys.path中的第一项。

后面重点在于讲解relative import 和 absolute import

未完待续。。。

python导入模块总结与分析的更多相关文章

  1. Python导入模块的三种形式

    Python导入模块的3中方式: 1.import module_name 这样在程序里就可以通过module_name.metnod_name()的方式访问模块里的函数了 Example: > ...

  2. python 导入模块 import 理解

    --python 导入模块 import 理解 -----------------------------------2014/03/18 python 导入一个模块的过程要求有一个叫做“路径搜索”的 ...

  3. python导入模块时的执行顺序

    当python导入模块,执行import语句时,到底进行了什么操作?按照python的文档,她执行了如下的操作: 第一步,创建一个新的module对象(它可能包含多个module) 第二步,把这个mo ...

  4. selenium + python自动化测试unittest框架学习(四)python导入模块及包知识点

    在写脚本的时候,发现导入某些模块,经常报错提示导入模块失败,这里来恶补下python导入模块的知识点. 1.模块导入时文件查找顺序 在脚本中,import xxx模块时的具体步骤: (1)新建一个mo ...

  5. python 导入模块与使用

    学习python之前一定要了解导入模块是怎么导入的,至少在看代码时不知道能很快的了解别人写的东西是哪里来. Python默认仅安装部分基础或核心模块,启动时也仅加载了基础模块,在需要是再显式的加载其他 ...

  6. python导入模块

    1.模块的定义: 模块定义:用来逻辑上组织python代码(变量.函数.类.逻辑:目的是:实现一个功能),本质就是.py结尾的python文件. 补充: 包的定义:用来从逻辑组织模块的,本质就是一个目 ...

  7. python 导入模块的坑。为什么整个项目能运行,单独运行某个文件模块就报错?多层目录不同文件夹怎么导入?

    一些文章介绍了python不同目录怎么导入问题,但py文件运行起点却从来没有文章说过!这是相当重要的!! 这个连接是网上99%的所讲的导入 https://www.cnblogs.com/luoye0 ...

  8. 转载 Python导入模块的几种姿势

    作为一名新手Python程序员,你首先需要学习的内容之一就是如何导入模块或包.但是我注意到,那些许多年来不时使用Python的人并不是都知道Python的导入机制其实非常灵活.在本文中,我们将探讨以下 ...

  9. Python导入模块Import和from+Import区别

    在我们使用python的时候会发现使用Import可以导入模块,from+Import也可以,那么他们之间有什么区别,该用哪一种呢?让我们来看看 1.首先在demo.py中创建一个变量a,定义一个函数 ...

随机推荐

  1. 构造用于1个方法在多线程环境下重复多次执行测试的通用方法 C#

    static void MultithreadsCycleTestWithSameMethod(int threadNumber, int cycleNumber, ThreadStart actio ...

  2. Python Django 获取表单数据的三种方式

    # In viewsdef zbsservice(request): #返回一个列表 v1 = models.Business.objects.all() # .value返回一个字典 v2 = mo ...

  3. 翻译 – CSS3 Backgrounds相关介绍——张鑫旭

    —————以下为翻译内容—————- CSS2.1中有5个background属性可以用来控制元素的背景.这5个属性是: background-color background-image backg ...

  4. cf1097D. Makoto and a Blackboard(期望dp)

    题意 题目链接 Sol 首先考虑当\(n = p^x\),其中\(p\)是质数,显然它的因子只有\(1, p, p^2, \dots p^x\)(最多logn个) 那么可以直接dp, 设\(f[i][ ...

  5. js实现放大镜的效果

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. VMware与Hyper-V

    前段时间在Windows10上安装Hyper-V,使用docker时,提示要卸载VMware 今天重新安装VMware时,提示: 根据连接进去:https://kb.vmware.com/s/arti ...

  7. 2018-10-15 21:07:38 c language

    2018-10-15 21:07:38 c language C语言编译器,神奇的魔法师 在类 UNIX 系统(Linux.Mac OS 等)下,可执行程序没有特定的后缀,系统根据文件的头部信息来判断 ...

  8. JS获取对象“属性和方法”的方法

    平时在写的代码过程中,经常会遇到对对象Object的数据处理.而在对对象的数据处理中,操作最频繁的是“数据引用”.“值的修改”.“获取关键字(属性)”.平时最烦的也是“获取关键字”,经常忘记怎么去获取 ...

  9. Ubuntu添加源列表

    1.首先备份源列表:sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup 2.清空原来的/etc/apt/sources.list,添加 ...

  10. Windows2003系统取消关机提示的方法

    方法有两种:1.编辑组策略 打开“开始”-“运行”,在“打开”一栏中输入“gpedit.msc”命令打开组策略编辑器,依次展开“计算机配置”→“管理模板”→“系统”,双击右侧窗口出现的“显示‘关闭事件 ...