python本地文件import/ from .. import总结

python本地文件import/ from … import总结

在 Python 中,从其他模块(文件)中导入类或函数时,有几种常用的方法。不同的导入方式适用于不同的文件夹结构,比如同级、上级、下级的文件或包。以下是 importfrom ... 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

导入方法

  1. 使用 import 语句导入同级文件

    # 在 main.py 中
    import module_a
    module_a.target_function()
    
  2. 使用 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

导入方法

  1. 使用绝对导入(推荐):

    # 在 main.py 中
    from sub_folder import module_b
    module_b.target_function()
    
  2. 从子文件夹的文件中导入特定函数

    # 在 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

导入方法

  1. 从子文件夹中导入上级文件的模块

    module_c.py 中导入 main.py 中的内容:

    # 在 sub_folder/module_c.py 中
    import sys
    sys.path.append('..')
    
    import main
    main.some_function()
    
    
  2. 从子文件夹中的文件导入父文件夹中的特定函数或类

    # 在 sub_folder/module_c.py 中
    import sys
    sys.path.append('..')
    
    from main import some_function
    some_function()
    
    

注意:相对导入(使用 ..)只适用于包内,也就是说 project_folder 必须是一个包(包含 __init__.py 文件),否则会报错。


相对导入和绝对导入的注意事项

  1. 运行位置:相对导入通常适合包内模块之间的导入。直接运行单个模块文件时,相对导入可能会报错。一般建议在包外部使用绝对导入。
  2. __init__.py 文件:要使文件夹被识别为包并使用相对导入,文件夹内必须包含一个 __init__.py 文件(可以是空文件)。
  3. 包结构:如果遇到导入问题,确保文件夹结构符合包结构,并且在包的根目录运行 Python 脚本(比如 python -m project_folder.main)。

总结

导入类型 代码示例 使用场景
同级导入 import modulefrom module import func 文件在同一文件夹内
下级导入 from sub_folder import module 从当前文件夹导入子文件夹中的模块
上级导入 import sys + sys.path.append(’..’) + import module 从子文件夹中的文件导入上级文件夹的模块
深层次上级导入 import sys + sys.path.append(’...’)+ import module 从孙文件夹中的文件导入祖父文件夹的模块

你可能感兴趣的:(python)