项目层级结构:
my_project/
├── main.py
├── module1/
│ ├── __init__.py
│ └── my_module.py
├── module2/
│ ├── __init__.py
│ └── another_module.py
1. 包结构和__init__.py
文件:
Python将包含__init__.py
文件的目录视为包,这允许文件夹内部的模块互相导入。无论包或模块位于项目结构的哪个级别,只要目录结构清晰,并且有__init__.py
,Python就能够正确识别这些模块并允许跨级别的导入。
2. 绝对路径(Absolute Path)
-
定义:绝对路径是使用项目根目录为基础的路径,逐级指定模块的路径,直到具体的模块或包。这种导入方式不依赖于当前文件所在的位置,始终从项目的根目录进行导入。
-
使用场景:适用于跨模块的导入,即使文件结构复杂,绝对路径导入的稳定性更强。
-
示例:
假设有如下项目结构:my_project/ ├── main.py ├── module1/ │ └── my_module.py └── module2/ └── another_module.py
从根目录(.)【子目录的所在的目录】开始,就是根目录下的子目录开始导入
在
module2/another_module.py
中使用绝对路径导入module1.my_module
:from module1 import my_module
这里,从根目录开始直接导入
module1
中的my_module
。
3. 相对路径(Relative Path)
-
定义:相对路径是==相对于当前模块所在的目录==进行导入的。可以使用点**(
.
)和双点(..
)**来表示当前目录和上一级目录。**.**
表示当前目录**..**
表示上一级目录
-
使用场景:适用于同一包中的模块之间进行导入,尤其是多层包结构中,文件之间的关系明确时,使用相对路径可以使代码更加简洁。
-
示例:
在上述项目结构中,如果要在module2/another_module.py
中相对路径导入module1.my_module
,可以使用:from ..module1 import my_module
这里的
..
表示返回上一级目录(即my_project
),然后导入module1
中的模块。4. 跨级导入示例:
假设有如下项目结构:
my_project/ ├── main.py ├── module1/ │ ├── __init__.py │ └── my_module.py ├── module2/ │ ├── __init__.py │ └── another_module.py
如果你希望从
main.py
中导入module1.my_module
,可以这样做:from module1 import my_module
但是,如果你在
module2/another_module.py
中希望导入module1/my_module.py
,你可以使用相对导入:from ..module1 import my_module
或者使用绝对导入:
from module1 import my_module