Python导入其他路径下的文件报错的问题及解决

 更新时间:2026年01月21日 09:02:13   作者:g11023225  
文章主要讨论了Python模块导入的路径问题,并提供了几种解决方案,包括使用绝对路径和修改sys.path等,通过这些方法,可以解决在导入模块时出现的ModuleNotFoundError问题,特别是在使用打包工具如pyinstaller时

1. 代码结构

如下两图所示,当前代码文件分别有三个:

test.py dir_a.py dir_b.py,其中主代码为test.py,该文件在主目录test文件夹下,dir_a.py dir_b.py在和test.py同级的DIR文件夹下。

其中test.py导入了DIR文件夹中的dir_a.py文件,而dir_a.py文件导入了同目录下的dir_b.py文件。

2. 错误的示例

2.1 我一开始的导入代码如下

test.py的导入代码部分:

# test.py
from DIR import dir_a

dir_a.py文件导入dir_b.py的代码部分:

# dir_a.py
import dir_b

这样的结果是,运行dir_a.py文件是没问题的,但是运行test.py时就会报错:ModuleNotFoundError: No module named 'dir_b',应该是找不到 dir_b.py文件。

其实这就是使用相对路径导入模块产生的问题,把相对路径改为绝对路径就行了。

注意绝对路径一定是要从当前环境的跟目录开始! 或者可以把dir_a.py dir_b.py文件所在的绝对路径添加到sys.path中。

2.2 将路径添加到sys.path中(打包不成功)

我在网络上查了好久,产生上面的问题是当前sys.path中缺少了DIR文件夹路径的问题,可以给添上,将test.py的导入代码部分修改为如下:

# test.py
import sys
sys.path.append('DIR')
from DIR import dir_a

修改完之后确实不会报错了,但是使用pyinstallerNuitka打包后,一样还是会报错,如下图,错误原因还是找你到dir_b

错误原因分析:

之所以打包后会出现错误,经过我的实验发现,pyinstaller没有把dir_b.py文件给打包进去,不知道为啥会出现这种情况,有知道的可以评论告诉我下。

2.3 使用绝对路径

网络上有另一种方案就是只修改dir_a.py文件中的内容,修改后的dir_a.py中的导入部分代码:

# dir_a.py
if __package__ is None or __package__ == '':
    # uses current directory visibility
    import dir_b
else:
    # uses current package visibility
    from . import dir_b

这样再运行代码dir_a.py test.py都不会有问题,而且打包后也不会报错。但是这样代码太臃肿了,建议使用2.4的方案

2.4 终极解决方案

只修改dir_a.py文件中引入模块的部分,修改为:

# dir_a.py
from DIR import dir_b

这样再运行代码dir_a.py test.py都不会有问题。

注意:

其实这里有一个很重要的点,就是绝对路径一定要从当前环境的根目录开始算。上面的写法默认test文件夹就是当前环境的根目录,这样的话是没问题的。但是假如test文件夹的上一级文件夹MyProj才是编译环境的根目录时(如下图),运行test.py不会报错,但是运行dir_a.py是会报错的。

这时候dir_a.py文件中就应该这样改:from test.DIR import dir_b

总结

代码书写时最好是代码都在一个目录下,这样就不会出现上面的问题了。如果必须要用的话,一定要注意模块导入问题,修改成本文提出的方式。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python matplotlib绘制散点图的实例代码

    Python matplotlib绘制散点图的实例代码

    这篇文章主要给大家介绍了关于Python matplotlib绘制散点图的相关资料,所谓散点图就是反映两组变量每个数据点的值,并且从散点图可以看出它们之间的相关性,需要的朋友可以参考下
    2021-06-06
  • python里运用私有属性和方法总结

    python里运用私有属性和方法总结

    在本文里我们给大家分享了关于python里运用私有属性和方法总结以及相关知识点内容,有兴趣的朋友们跟着参考学习下。
    2019-07-07
  • 利用Python轻松解析XML文件

    利用Python轻松解析XML文件

    XML文件在数据处理和配置存储中非常常见,但手动解析它们可能会让人头疼,Python提供了多种简单高效的方法来处理XML文件,下面小编就来和大家详细介绍一下吧
    2025-04-04
  • pycharm双击无响应(打不开问题解决办法)

    pycharm双击无响应(打不开问题解决办法)

    这篇文章主要介绍了pycharm双击无响应(打不开问题解决办法),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Python调用本地ollama大模型实现智能语音助手

    Python调用本地ollama大模型实现智能语音助手

    这篇文章主要为大家详细介绍了Python如何调用本地ollama大模型实现智能语音助手,集成了语音录制,语音识别等功能,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-05-05
  • 用OpenCV进行年龄和性别检测的实现示例

    用OpenCV进行年龄和性别检测的实现示例

    这篇文章主要介绍了用 OpenCV 进行年龄和性别检测的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Python 创建新文件时避免覆盖已有的同名文件的解决方法

    Python 创建新文件时避免覆盖已有的同名文件的解决方法

    今天小编就为大家分享一篇Python 创建新文件时避免覆盖已有的同名文件的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • Python实现的多叉树寻找最短路径算法示例

    Python实现的多叉树寻找最短路径算法示例

    这篇文章主要介绍了Python实现的多叉树寻找最短路径算法,结合实例形式分析了Python使用深度优先查找获取多叉树最短路径相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • tensorflow 初始化未初始化的变量实例

    tensorflow 初始化未初始化的变量实例

    今天小编就为大家分享一篇tensorflow 初始化未初始化的变量实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python利用TextBlob库实现轻松分析文本情感

    python利用TextBlob库实现轻松分析文本情感

    TextBlob是一个基于NLTK(Natural Language Toolkit)和Pattern库的Python库,它提供了一系列方便的接口和方法来处理文本数据,下面我们就来学习一下如何利用TextBlob库实现轻松分析文本情感吧
    2023-12-12

最新评论