Python如何跨文件夹导入文件?如何从lights.py调用main.py的函数?
从lights.py调用main.py函数的操作方法
你的项目结构如下:
- Elvvo
- functions
- lights.py
- main.py
Elvvo文件夹绝对路径为/home/pi/Desktop/Elvvo,以下是两种常用实现方案:
- functions
方案1:使用相对导入(符合Python包规范,推荐)
操作步骤
- 分别在Elvvo根目录、functions目录下新建空的
__init__.py文件,该文件用于标识目录为Python可导入的包,修改后结构如下:- Elvvo
__init__.py- functions
__init__.py- lights.py
- main.py
- Elvvo
- 在
lights.py中使用相对导入语法引入main.py的函数,例如你要导入main.py中名为control_device的函数,写法如下:
语法中from ..main import control_device # 调用示例 control_device()..代表上级目录,即从functions目录跳转至Elvvo根目录找到main.py。 - 运行时不要直接进入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
相关产品推荐
相关产品推荐

