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

Python子文件导入报错,如何实现跨文件夹文件相互导入?

解决Python子文件夹模块相互调用问题

问题核心

你遇到的ImportError是因为直接运行子文件夹内的脚本,或者导入方式未遵循Python包的规则。相对导入仅适用于作为包一部分被导入的模块,而非独立运行的脚本。

调整方案

1. 统一从项目根目录启动(必做)

永远通过根目录的Main.py启动项目,不要直接运行InputSubFolder里的Input.py或Output.py。这样Python会自动将项目根目录加入sys.path,确保绝对导入正常工作。

2. 修正模块导入语句

在Output.py中,把相对导入改成绝对导入(基于项目根目录):

# 替换原来的 from .Input import Choice27
from InputSubFolder.Input import Choice27
import os

def New_File():
    # 后续代码不变,建议调整路径(见下方)
    ...

3. 正确使用__init__.py

在InputSubFolder文件夹下创建空的__init__.py文件(空文件即可),让Python把这个文件夹识别为一个包。之后在Main.py中可以正常导入子模块:

# Main.py 中的导入示例
import InputSubFolder.Input as IN
import InputSubFolder.Output as OUT

# 调用Output.py中的函数
OUT.New_File()

4. 替换硬编码路径(可选但推荐)

你当前的file_path是硬编码的绝对路径,换成相对路径可以避免项目移动后路径失效:

def New_File():
    # 获取当前脚本(Output.py)所在文件夹的绝对路径
    subfolder_path = os.path.dirname(os.path.abspath(__file__))
    # 拼接Test.txt的路径(假设Test.txt在InputSubFolder里,若不在请调整路径层级)
    file_path = os.path.join(subfolder_path, "Test.txt")
    Var1 = str(Choice27.Var[0])
    Var2 = str(Choice27.Var[1])
    with open(file_path, 'r') as file:
        Output = file.read()
        Replace = {'Find1':Var1,'Find2':Var2}
        for key, value in Replace.items():
            Output = Output.replace(key, value)

验证auto-py-to-exe编译

编译时,确保在auto-py-to-exe中选择项目根目录作为工作目录,并且将Main.py作为入口脚本。这样编译后的exe会正确识别包结构,不会出现导入错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:55:20