模块modulenotfound

本文详细介绍了Python中模块和包的概念,包括如何使用dir()函数查看模块内的所有名称,以及包的结构和引用方式。通过实例展示了不同层级的包结构,并解释了如何通过不同的import语句访问包内的模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#1.dir(模块名)
dir(模块) 可以找到模块内定义的所有名称。以一个字符串列表的形式返回

import sys
print(dir(sys))

#2.包
1.一个模块的名称是 A.B, 那么他表示一个包 A中的子模块 B 。
目录只有包含一个叫做 init.py 的文件才会被认作是一个包.

不妨假设你想设计一套统一处理声音文件和数据的模块(或者称之为一个"包")。
这里给出了一种可能的包结构(在分层的文件系统中):
sound/ 顶层包
init.py 初始化 sound 包
formats/ 文件格式转换子包
init.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py

effects/ 声音效果子包
init.py
echo.py
surround.py
reverse.py

filters/ filters 子包
init.py
equalizer.py
vocoder.py
karaoke.py

2.引用

import 包1.包2.库 #访问用包.包.库.函数
from 包1.包2 import 库 #访问用库.函数
from 包1.包2.库 import 函数 #这种方法会导入子模块,并且可以直接使用函数
from 包 import * #前提:包定义文件 __init__.py 存在一个叫做 __all__ 的列表变量。变量当中写入哪个模块则导入哪个模块,不写则什么都不导入。

*如果在结构中包是一个子包(比如这个例子中对于包sound来说),而你又想导入兄弟包(同级别的包)你就得使用导入绝对的路径来导入。比如,如果模块sound.filters.vocoder 要使用包sound.effects中的模块echo,你就要写成 from sound.effects import echo。

*若使用from 包 import *会导入包内所有模块,但在如windows系统上无法区分模块名的大小写。
如果包定义文件 __init__.py 存在一个叫做 __all__ 的列表变量,那么在使用 from package import * 的时候就把这个列表中的所有名字作为包内容导入。
这里有一个例子,在:file:sounds/effects/__init__.py中包含如下代码:

__all__ = ["echo", "surround", "reverse"]

这表示当你使用from sound.effects import *这种用法时,你只会导入包里面这三个子模块。
如果 __all__ 真的没有定义,那么使用from 。。。 import *这种语法的时候,就不会导入任何子模块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值