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
相关产品推荐
相关产品推荐

