python本地文件import/ from .. import总结
python本地文件import/ from … import总结
在 Python 中,从其他模块(文件)中导入类或函数时,有几种常用的方法。不同的导入方式适用于不同的文件夹结构,比如同级、上级、下级的文件或包。以下是 import
和 from ... import
从本地导入文件的场景:
1. 基本概念
import
语句:直接导入整个模块(Python 文件),使用模块名调用其中的类或函数。
import module_name
module_name.function_name()
from ... import ...
语句:从模块中导入特定的类或函数,直接使用导入的类或函数,无需加模块名。
from module_name import function_name
function_name()
2. 文件夹结构中的常见导入方式
Python 使用相对导入和绝对导入来管理文件夹中的模块导入。不同的文件夹结构需要不同的导入方式。
同级文件的导入
例子
假设文件夹结构如下:
project_folder/
│
├── main.py # 主文件
└── module_a.py # 定义了 target_function
导入方法
-
使用
import
语句导入同级文件:# 在 main.py 中 import module_a module_a.target_function()
-
使用
from ... import ...
语句导入同级文件中的特定函数:# 在 main.py 中 from module_a import target_function target_function()
下级文件夹中的文件导入(子文件夹)
例子
假设文件夹结构如下:
project_folder/
│
├── main.py
└── sub_folder/
├── __init__.py # 空文件,表示子文件夹是一个 Python 包
└── module_b.py # 定义了 target_function
导入方法
-
使用绝对导入(推荐):
# 在 main.py 中 from sub_folder import module_b module_b.target_function()
-
从子文件夹的文件中导入特定函数:
# 在 main.py 中 from sub_folder.module_b import target_function target_function()
上级文件夹中的文件导入(父文件夹)
相对导入只能在包内使用,所以这种导入方式适用于在同一个包内的情况(比如运行子文件夹中的文件,而需要导入父文件夹中的模块)。
例子
假设文件夹结构如下:
project_folder/
│
├── main.py
├── __init__.py
└── sub_folder/
├── __init__.py
└── module_c.py
导入方法
-
从子文件夹中导入上级文件的模块:
在
module_c.py
中导入main.py
中的内容:# 在 sub_folder/module_c.py 中 import sys sys.path.append('..') import main main.some_function()
-
从子文件夹中的文件导入父文件夹中的特定函数或类:
# 在 sub_folder/module_c.py 中 import sys sys.path.append('..') from main import some_function some_function()
注意:相对导入(使用 ..
)只适用于包内,也就是说 project_folder
必须是一个包(包含 __init__.py
文件),否则会报错。
相对导入和绝对导入的注意事项
- 运行位置:相对导入通常适合包内模块之间的导入。直接运行单个模块文件时,相对导入可能会报错。一般建议在包外部使用绝对导入。
__init__.py
文件:要使文件夹被识别为包并使用相对导入,文件夹内必须包含一个__init__.py
文件(可以是空文件)。- 包结构:如果遇到导入问题,确保文件夹结构符合包结构,并且在包的根目录运行 Python 脚本(比如
python -m project_folder.main
)。
总结
导入类型 | 代码示例 | 使用场景 |
---|---|---|
同级导入 | import module 或 from module import func |
文件在同一文件夹内 |
下级导入 | from sub_folder import module |
从当前文件夹导入子文件夹中的模块 |
上级导入 | import sys + sys.path.append(’..’) + import module |
从子文件夹中的文件导入上级文件夹的模块 |
深层次上级导入 | import sys + sys.path.append(’...’) + import module |
从孙文件夹中的文件导入祖父文件夹的模块 |
作者:菜就多练@Jade