Python:子文件夹脚本读取模块相对路径文件的问题
问题分析
问题根源在于read.py里用了相对当前工作目录的路径./lib/data.pk——这个路径的参照是执行脚本时的工作目录,而不是read.py自身所在的目录。当从script/inner.py执行时,工作目录是script/,程序会去寻找script/lib/data.pk,自然找不到实际存放在module/lib/里的文件。
解决方案
修改read.py,让文件路径基于自身所在位置构建绝对路径,彻底摆脱工作目录的影响:
import os import pickle # 获取read.py所在目录的绝对路径 module_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接出data.pk的完整绝对路径 data_file_path = os.path.join(module_dir, "lib", "data.pk") with open(data_file_path, "rb") as f: data = pickle.load(f)
关键逻辑说明
os.path.abspath(__file__):拿到read.py文件本身的绝对路径,比如/xxx/root/module/read.pyos.path.dirname(...):从上面的路径中提取出所在目录,也就是/xxx/root/module/os.path.join(...):安全拼接目录和子路径,生成/xxx/root/module/lib/data.pk,跨Windows、Linux等系统都能正常工作
修改后,不管是从outer.py还是inner.py导入module.read,都能精准定位到目标文件。
内容的提问来源于stack exchange,提问作者ankit lohiya
相关产品推荐
相关产品推荐

