模块与包

模块

Python 中一个以 .py 结尾的文件就是一个模块,模块中定义了变量、函数等来实现一些类似的功能。Python 有很多自带的模块(标准库)和第三方模块,一个模块可以被其他模块引用,实现了代码的复用性。模块分为以下三种:

  • 内置标准模块(又称标准库)执行help('modules')查看所有python自带模块列表
  • 第三方开源模块,可通过 pip install 模块名 安装
  • 自定义模块

当你的模块文件越来越多,就需要对模块文件进行划分。包是存放模块的文件夹,包中包含 __init__.py 和其他模块,__init__.py 可为空也可定义属性和方法,在 Python3.3 之前的版本,一个文件夹中只有包含 __init__.py,其他程序才能从该文件夹引入相应的模块、函数等,之后的版本没有 __init__.py 也能正常导入,简单来说就是 Python3.3 之前的版本,__init__.py 是包的标识,是必须要有的,之后的版本可以没有。

Python 所有加载的模块信息都存放在 sys.modules 字典结构中,当 import 一个模块时,会按如下步骤来进行

import ...

import 包名1.包名2...模块名

如果 import A,检查 sys.modules 中是否已经有 A,如果有则不加载,如果没有则为 A 创建 module 对象,并加载 A,即可以重复导入,但只加载一次。

from ... import ...

from 包名1.包名2... import 模块名from 包名1.包名2...模块名 import 变量名/函数名

如果 from A import B,先为 A 创建 module 对象,再解析 A,从中寻找 B 并填充到 A 的 __dict__ 中。

举例

首先创建包和模块的目录结构如下:

package|- pg1|- - __init__.py|- - a.py|- - b.py|- pg2|- - __init__.py|- - c.py|- - d.py

a.py

def a():    print('a')

b.py

def b():    print('b')

c.py

def c():    print('c')

d.py

def d():    print('d')

模块与包的调用

# a 模块中引入 b 模块import pg1.bfrom pg1 import b# a 模块中引入 c 模块import pg2.cfrom pg2 import c# a 模块中引入 c 模块和 d 模块import pg2.c,pg2.dfrom pg2 import c,d# a 模块中引入包 pg2 下的所有模块from pg2 import *# a 模块中引入 d 模块中函数 d()from pg2.d import d# 调用函数 d()d()

绝对导入与相对导入

对于 Python 的包内导入,即包内模块导入包内模块,存在绝对导入和相对导入问题。

普通 Python 模块的搜索路径

  • 在当前模块所在路径中搜索导入模块
  • 在环境变量 PYTHONPATH 指定的路径列表中搜索导入模块
  • 在 sys.path 指定的路径列表中搜索导入模块

绝对导入

绝对导入的格式为 import A.B 或 from A import B

如果是绝对导入,一个模块只能导入自身的子模块或和它的顶层模块同级别的模块及其子模块。若要导入其他位置的模块和包,一个简单的办法可以采用sys.path指定路径列表,例如用绝对方式导入上层目录中的模块,可以采用如下形式:

import syssys.path.append('..')

相对导入

相对导入格式为 from .A import B 或 from ..X import Y。

  • . 代表当前模块,
  • .. 代表上层模块,
  • ... 代表上上层模块,依次类推。

需要注意:存在相对导入语句的模块,是不能直接运行的,否则会有异常:

ValueError: Attempted relative import in non-package

如果是相对导入,一个模块必须有包结构且只能导入它的顶层模块内部的模块 所以,如果一个模块被直接运行,则它自己为顶层模块,不存在层次结构,所以找不到其他的相对路径,所以如果直接运行 python xx.py ,而xx.py有相对导入就会报错!

参考

Python 包内的导入问题(绝对导入和相对导入)

Python 基础(十):模块与包

dllimport 找不到指定的模块_Python语法基础(15)模块与包相关推荐

  1. import torch 找不到模块_Python零基础入门:关于Python模块与包的详细解读和使用...

    一.模块和包的定义 模块的定义:任何*.py 的文件都可以当作模块使用import 导入 包的定义:包含一个__init__.py和其他模块.其他子包的一个目录 实际项目中,所谓的包和模块分别代表什么 ...

  2. python找不到os模块_Python中的OS模块:您需要知道的一切

    Python是当今业界最强大的编程语言之一.由于Python具有许多特性和强大的通用性,许多复杂的编程目标可以很容易地在Python中实现.在本文中,我们将按照以下顺序讨论Pyt Python是当今业 ...

  3. python运行系统找不到指定文件_系统找不到指定文件_系统找不到指定的文件_python 系统找不到指定的文件 - 云+社区 - 腾讯云...

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我正在构建一个依赖于另一个库的特定库,当我这样做时,我收到以下警告消息:&quo ...

  4. python找不到指定文件夹_python找不到指定文件

    python3.5.3 windows10 需要使用pydub整合音频文件,但是pydub需要的libav or ffmpeg.都下载不下来 代码:from pydub import AudioSeg ...

  5. python爬虫模块_python实现爬虫的模块总结

    网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.其本质就是利用脚本发送请求,解析响应,然后提取有用信息,最后保存下来. python由于语法简单,可 ...

  6. python中xlrd模块_Python中的xlrd模块使用原理解析

    on里面的xlrd模块详解(一) - 疯了的小蜗 - 博客园[内容]:> 那我就一下面积个问题对xlrd模块进行学习一下: 什么是xlrd模块? 为什么使用xlrd模块? 1.什么是xlrd模块 ...

  7. python中的random模块_Python内置random模块生成随机数的方法

    本文我们详细地介绍下两个模块关于生成随机序列的其他使用方法. 随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的ran ...

  8. python必学的模块_Python必学的模块有哪些?

    展开全部 简单来说,模块就是一堆代码实现某个功32313133353236313431303231363533e4b893e5b19e31333433653866能,它们是已经写好的.py文件,在我们 ...

  9. 如何下载python模块_Python第三方库(模块)下载和安装(使用pip命令)

    进行 Python 程序开发时,除了使用 Python 内置的标准模块以及我们自定义的模块之外,还有很多第三方模块可以使用,这些第三方模块可以借助 Python官方提供的查找包页面(https://p ...

最新文章

  1. phpstorm xdebug本地调试断点不生效_phpstudy+phpstrom实现断点
  2. System.DBNull
  3. 从postgress 读取数据
  4. 机器学习中的MLE、MAP和贝叶斯估计
  5. Android studio删除sdk的方法(图文教程)
  6. C#Word转Html的类
  7. (六)Qt Delgate的使用 简单说明
  8. java 怎么为泛型参数赋值_Java泛型讲解
  9. 化学人学python有前途吗-从化学实验室到数据分析师,月薪翻倍后的转行经验总结!...
  10. FZU 2129 子序列个数(DP)题解
  11. (转)使用Flexible实现手淘H5页面的终端适配
  12. 红包小游戏php源码,H5抢红包 小游戏源码
  13. clearcase、Git之我见
  14. Linux性能基础:CPU、内存、磁盘等概述
  15. Java 打印100以内的所有奇数和偶数
  16. Java复习第二弹!
  17. Python实现电影抢票系统需要几行代码?猜对有奖
  18. API安全前景与趋势
  19. 哔哩哔哩2020届秋招数据分析师面试第一轮(2019.8.8)
  20. arcgis的lyr样式转qgis的sld样式

热门文章

  1. python gps 地图 轨迹_Apollo问答丨执行rtk_recorder.sh start录制循迹轨迹时报错怎么办?...
  2. python调用函数怎么错_python调用函数失败是什么原因
  3. moore 数据集_可计算存储:数据压缩和数据库计算下推
  4. oracle从光盘启动不了,oracle install
  5. php 设置页面内容具有缓存性,php header()设置页面Cache缓存
  6. Spring Cloud Stream与RabbitMQ 生产者和消费者位于同一个应用服务
  7. Spring Cloud 负载均衡
  8. MySQL闪回原理与实战
  9. 核心网upf作用_核心网“入门级”科普,你看了没?
  10. python mpi多线程_使用 MPI for Python 并行化遗传算法