美文网首页
12 python中模块和包如何导入

12 python中模块和包如何导入

作者: 小码码 | 来源:发表于2018-07-18 19:33 被阅读38次

1 模块的三种类型

  • python标准库
    python自带的标准库,比如常用的有os,sys,re,logging等

  • 第三方模块
    需要安装第三方模块以后才能导入,比如django

  • 应用程序自定义模块

2 模块导入的方法

  • import 语句
import module1[, module2[,... moduleN]

当使用import语句时,Python解释器会从sys.path所存的的路径里搜索对应的模块。sys.path的内容示例:

['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu',
'/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']  

若在当前目录下存在与要引入模块同名的文件,就会把要引入的模块屏蔽掉,所以不能用系统的模块名当做新建文件的文件名。

  • from…import 语句
from modname import name1[, name2[, ... nameN]]

该语句不会把整个modulename模块导入到当前的命名空间中,只会将它里面的name1或name2单个引入到执行这个声明的模块的全局符号表中。

  • From…import* 语句
from modname import *

该语句可以导入一个模块中的所有项目。然而这种声明不建议使用,因为引入的其它来源中函数的命名很可能与当前模块中的函数名冲突。

运行本质:
#1 import test
#2 from test import add  
无论1还是2的方式,首先会通过sys.path找到test.py,然后执行test脚本(全部执行),区别是1会将test这个变量名加载到名字空间,而2只会将add这个变量名加载进来。
  • 利用importlib模块
t= importlib.import_module('m1.t')   #导入m1下面的t模块
t.test()      #调用t里面的test()

3 包package

python 中每建一个package,里面会多一个init.py文件,即该文件的出现表明该文件夹是一个包。包调用时执行的就是init.py文件

  • package 的作用:为了避免模块名冲突
  • 模块导入中常用的知识点
    (1)每执行一个文件时,系统会将该执行文件所在的文件夹路径添加到sys.path中。
    (2)多层包文件的调用



    在hanshu.py中调用rizhi.py里面的logger()函数的方法:

#方式一:
from web.web1.web2 import rizhi
logger=rizhi.logger()
logger.info("test1")

#方式二:
from web.web1.web2.rizhi import logger
logger=logger()
logger.info("test2")

#方式三 :错误的方式
from web.web1 import web2  #执行的是web2里面的__init__.py文件,而不是rizhi.py文件,所以后面会报错
logger=web2.rizhi.logger()   #报错AttributeError: module 'web.web1.web2' has no attribute 'rizhi'
logger.info('test3')
  • if name=="main"的作用:
    (1)只有当当前文件为执行文件时,name才为main,否则name为文件的名字,比如web.web1.web2.rizhi。
    (2)if name=="main"是用来测试文件代码用的,如何直接执行测试文件,一定会执行下面的代码,否则不会执行。
  • BASE_DIR的使用

如果在nod1.py里面import hello是会报错的,因为执行nod1.py时只会将app的路径加到sys.path里面,而app下面没有hello.py文件,所以会报找不到hello的错误(由于pycharm会将app的上层目录myapp加进sys.path,所以在pycharm中不会报错)。
通常需要手动将myapp的路径加到sys.path里面,操作如下:

BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
g

在nod1.py里面的BASE_DIR为myapp的目录。

相关文章

  • 12 python中模块和包如何导入

    1 模块的三种类型 python标准库python自带的标准库,比如常用的有os,sys,re,logging等 ...

  • 包和模块

    一、python中包和模块的区别: 1.包:包含 文件的文件夹,导入模块的可通过 变量。2.模块:编写python...

  • 包和pygame

    python中的包: 引入包、使用import.模块的方法导入、通过form文件import模块的方式导入、在文件...

  • Python中的包

    目录 什么是python的包与模块 包的身份证 如何创建包 包的倒入 模块的导入 什么是pytlhon的包 包就是...

  • 浅谈 Python 的模块导入

    浅谈 Python 的模块导入 本文不讨论 Python 的导入机制(底层实现细节),仅讨论模块与包,以及导入语句...

  • python18-模块和包

    本篇主要是讲的是模块和包基本操作,包括模块在同一包内/不同包内的导入和调用等。在学习python的过程中模块是必不...

  • 【笔记】《Python语言以及应用》- 面向对象

    一、Python盒子: 模块、包和程序 1. 模块 一个模块就是一个Python代码文件 导入模块: 搜索路径: ...

  • 模块

    1.1 python 中的模块介绍和使用 模块好比是工具包, 想要使用这个工具包中的工具(函数),就需要导入这个模...

  • Python学习笔记之模块

    本篇主要介绍Python模块和如何将模块导入编程环境中,模块是用来组织代码的方法。 模块(module) 模块支持...

  • Python 绝对导入和相对导入详解

    Python 相对导入与绝对导入,这两个概念是相对于包内导入而言的。包内导入即是包内的模块导入包内部的模块。 Py...

网友评论

      本文标题:12 python中模块和包如何导入

      本文链接:https://www.haomeiwen.com/subject/pehapftx.html