python import详解
1.import定义
import 是用来导入python项目需要的包或函数,包来源有两种一种是自己编写的包,还有就是官方提供的第三方包。import的用法主要有两种,第一种是直接import 第二种是from 文件 import 包
2.导入第三方包
这里推荐在自己的项目下创建按虚拟环境,如何在terminal上输入pip install 包名,具体如何创建虚拟环境可以查看我之前的文章,创建虚拟环境,可以在自己的pycharm下的terminal下输入命令
类似于这样。
3.导入自己创建的包或者函数
说到导入自己创建的包和函数,首先需要了解python的绝对导入和相对导入两个概念,通常这些问题会引起类似于这几种错误。
ModuleNotFoundError: No module named 'moduleY'
ValueError: attempted relative import beyond top-level package
ModuleNotFoundError: No module named '__main__.moduleY'; '__main__' is not a package
3.1 绝对导入
绝对导入是python的默认导入方式,需要注意的是,在当前模块中引入同级别的模块或者同级别的包下的模块的时候,最好把导入路径写完整。当出现类似于这样的错误时就需要考虑相对导入的方式
3.2 相对导入
相对导入解决了绝对导入遇到的一些问题:
- 同一个包下的模块可以很方便的相互引用,使用像 from . import xxx 的语句就行。
- 顶层包的报名改了,包下的模块的相对导入的语句基本不用改。
下面简单举一个例子来说明用法:
project/
m1/
a1.py
m2/
a2.py
a3.py
a4.py
假如说一个简单的目录结构如上,当a3.py想要导入a1 a2 a4是绝对导入的方式为:
import a4
from m1 import a1
from m2 import a2
有时会遇到导入失败的提示。
那么相对导入怎么用呢?相对导入只能使用 from <> import <> 这种语法,并且使用 . 作为前导点。
from . import a4
from .m1 import a1
from .m2 import a2
. 代表的是当前目录下,..
代表的是上一级目录下的module
例如向a2中导入a4,需要输入from .. import a4
注意:相对导入只使用于顶级包内的模块,可以理解为,需要导包的程序位于项目第一层文件中。