详解Python中的相对导入和绝对导入
在Python中,导入模块是非常常见的操作。在导入模块时,可以使用相对导入或绝对导入。
相对导入
相对导入是指从当前模块的位置出发,按照相对路径导入模块。相对导入使用点号(.)和双点号(..)表示相对路径。
假设目录结构如下:
.
├── main.py
└── package
├── module1.py
├── module2.py
└── subpackage
├── module3.py
└── module4.py
其中,main.py
是主程序入口,默认的工作目录为当前目录。
在module2.py
中,如果想导入同级目录下的module1.py
模块,可以使用相对导入,代码如下:
from .module1 import something
在module3.py
中,如果想导入父级目录的module2.py
模块,可以使用相对导入,代码如下:
from ..module2 import something
绝对导入
绝对导入是指按照模块全名的方式导入模块,即从Python安装路径开始寻找模块。绝对导入使用from
和import
关键字。
假设有一个模块mymodule
,其全名为mypackage.mysubpackage.mymodule
,要导入它,代码如下:
from mypackage.mysubpackage import mymodule
要注意的是,如果模块mymodule
和当前模块位于同一级目录下,不能使用绝对导入。此时应该使用相对导入。
示例说明
示例一
我们可以在module1.py
中定义一个函数,然后在module2.py
中使用相对导入来调用该函数。
在module1.py
中定义hello()
函数:
def hello():
print("Hello, world!")
在module2.py
中使用相对导入导入module1.py
,并调用hello()
函数:
from .module1 import hello
hello()
输出:
Hello, world!
示例二
我们可以在main.py
中导入mypackage.mysubpackage.mymodule
,并调用该模块中定义的函数。
在mypackage.mysubpackage.mymodule
中定义echo()
函数:
def echo(message):
print(message)
在main.py
中导入mypackage.mysubpackage.mymodule
,并调用echo()
函数:
from mypackage.mysubpackage import mymodule
mymodule.echo("Hello, world!")
输出:
Hello, world!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Python中的相对导入和绝对导入 - Python技术站