导入父文件夹中的模块并读取当前文件夹内的资源

IT科技2025-11-05 08:24:399

在某些特殊情况下,导入我们的父文 Python 脚本需要调用父目录下的其他模块。例如:

在编写 GNE 的夹件夹测试用例时,有一个脚本 generate_new_cases.py放在 tests文件夹中。中的资源而 tests 文件夹与 gne 文件夹放在同一个位置。模块其中 gne 文件夹是并读一个包。我现在需要从generate_new_cases.py 文件中导入 gne 里面的取当前文一个类GeneralNewsExtractor。

为了简化问题,导入我单独写了一个演示的父文样例。它的夹件夹文件结构与每个文件中的内容如下:

现在,我直接在 scripts 文件夹里面运行run.py会报错,中的资源提示从包的模块最顶层之外相对导入。

现在,并读我们改一下代码,取当前文尝试在scripts 文件夹的导入父文件夹中运行代码,发现还是云服务器会报错:

我们再来改一下代码,在 scripts 文件夹中,把父文件夹加入到sys.path中:

import sys sys.path.append(..) 

运行效果如下图所示:

这种写法,当我们在scripts 文件夹里面运行run.py时,确实已经正常了。但是如果我们在scripts文件夹的父文件夹再运行代码,又不对了,如下图所示:

为了检查这个原因,我们打印一下sys.path:

大家有没有发现一个很不和谐的东西:其他路径都是绝对路径,就最后我们加了两个点看起来很违和。那如果我们把这两个点换成绝对路径呢?于是尝试获取当前正在运行的这个文件的绝对路径:

import sys from pathlib import Path current_folder = Path(__file__).absolute().parent father_folder = str(current_folder.parent) sys.path.append(father_folder) 

运行效果如下图所示:

导入模块已经正常了,但是读取资源文件又异常了。

这是因为,import导入模块时,是根据sys.path中的路径来寻找的。IT技术网但是读取资源文件的时候,相对文件路径是相对于工作区来寻找的。

现在我们在~/test_import_father_module执行python3 scripts/run.py,那么当前的工作区就是~/test_import_father_module。而由于资源文件是在scripts文件夹中的,所以就找不到。

所以我们还需要修改一下工作区:

import os from pathlib import Path current_folder = Path(__file__).absolute().parent os.chdir(str(current_folder)) 

运行效果如下图所示:

现在无论是读取资源文件还是导入模块,都已经正常了。

我们再回到 scripts 文件夹中执行看看:

发现也能正常执行。

总结涉及到模块导入相关的环境,可以通过在sys.path添加绝对路径来解决。涉及到读取资源文件的相关环境,可以通过使用os.chdir修改工作区为另一个绝对路径来解决。

本文地址:http://www.bzuk.cn/news/015d32499660.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

手工制作儿童电脑玩具教程(让孩子动手制作电脑玩具,开发创造力和动手能力)

电脑系统教程(利用U盘轻松操作电脑系统,让您的电脑运行更加顺畅)

华硕电脑如何使用PE系统安装Windows7系统(华硕电脑PE系统安装Windows7系统的步骤和注意事项)

苹果6s内存32g的性能与优势(解析苹果6s内存32g的配置和使用体验)

ROG显卡安装教程(ROG显卡安装教程及注意事项,助你提升游戏体验)

如何使用U盘启动进入BIOS设置(简单易懂的U盘启动BIOS设置指南)

使用新SSD进行PE装系统(详解新SSD装系统教程,让你的电脑轻松焕发新生)

三星A7100(探索三星A7100手机游戏性能与玩家体验)

友情链接

滇ICP备2023006006号-33