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 从孙文件夹中的文件导入祖父文件夹的模块

    作者:菜就多练@Jade

    物联沃分享整理
    物联沃-IOTWORD物联网 » python本地文件import/ from .. import总结

    发表回复