You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何跨文件夹导入文件?如何从lights.py调用main.py的函数?

从lights.py调用main.py函数的操作方法

你的项目结构如下:

  • Elvvo
    • functions
      • lights.py
    • main.py
      Elvvo文件夹绝对路径为/home/pi/Desktop/Elvvo,以下是两种常用实现方案:

方案1:使用相对导入(符合Python包规范,推荐)

操作步骤

  1. 分别在Elvvo根目录、functions目录下新建空的__init__.py文件,该文件用于标识目录为Python可导入的包,修改后结构如下:
    • Elvvo
      • __init__.py
      • functions
        • __init__.py
        • lights.py
      • main.py
  2. 在lights.py中使用相对导入语法引入main.py的函数,例如你要导入main.py中名为control_device的函数,写法如下:
    from ..main import control_device
    
    # 调用示例
    control_device()
    
    语法中..代表上级目录,即从functions目录跳转至Elvvo根目录找到main.py。
  3. 运行时不要直接进入functions目录执行python3 lights.py,需要进入Elvvo的上级目录(即/home/pi/Desktop),以模块方式启动:
    python3 -m Elvvo.functions.lights
    

方案2:添加项目根目录到Python搜索路径(适配任意运行方式)

如果不想调整运行方式,可以直接将Elvvo目录加入Python的模块搜索路径,在lights.py开头添加以下代码:

import sys
sys.path.append("/home/pi/Desktop/Elvvo")

# 直接导入main.py中的函数即可
from main import control_device

该方案无需调整运行方式,任意目录下执行lights.py都可正常导入,缺点是硬编码了项目路径,项目迁移后需要修改对应路径值。

注意事项

  • 避免出现循环导入:不要在main.py中导入lights.py内容的同时,又在lights.py中导入main.py的内容,会引发导入错误。
  • main.py中不需要在导入时执行的代码,建议全部放在if __name__ == "__main__":代码块下,否则导入main.py时会自动执行全局代码。

内容的提问来源于stack exchange,提问作者user16257123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:45:02