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中theano库的线性回归

    基于python中theano库的线性回归

    这篇文章主要为大家详细介绍了基于python中theano库的线性回归,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Flask创建并运行数据库迁移的实现过程

    Flask创建并运行数据库迁移的实现过程

    Flask创建并运行数据库迁移的过程是一个涉及多个步骤的操作,旨在帮助开发者在开发过程中管理数据库模式的变化,而不需要手动地删除和重建数据库表,从而避免数据丢失,以下是一个详细的步骤说明,需要的朋友可以参考下
    2024-09-09
  • 如何用Python来理一理红楼梦里的那些关系

    如何用Python来理一理红楼梦里的那些关系

    这篇文章主要介绍了用Python来理一理红楼梦里的那些关系代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python使用Selenium实现模拟登录的示例代码

    Python使用Selenium实现模拟登录的示例代码

    Selenium(本文基于python3.8)是一个功能强大的自动化测试工具,它可以用于模拟用户在浏览器中的行为,比如点击、输入、滚动等等,本教程将详细介绍如何使用Python编写一个模拟登录地爬虫,使用XPath等多种元素匹配方法,需要的朋友可以参考下
    2023-08-08
  • python判断字符串是否是json格式方法分享

    python判断字符串是否是json格式方法分享

    这篇文章主要介绍了python判断字符串是否是json格式方法分享,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • python实现同级目录调用的示例详解

    python实现同级目录调用的示例详解

    同级目录指的是位于同一级别的文件夹,这些文件夹具有相同的层级结构,它们相互平行,没有一个被包含在另一个之中,本文将给大家介绍python实现同级目录调用的示例,需要的朋友可以参考下
    2024-06-06
  • Python OS模块实例详解

    Python OS模块实例详解

    这篇文章主要介绍了Python OS模块,结合实例形式总结分析了Python使用OS解析文件路径、判断文件、目录等相关操作技巧,需要的朋友可以参考下
    2019-04-04
  • graphviz 最新安装教程适用初学者

    graphviz 最新安装教程适用初学者

    Graphviz 是一个自动排版的作图软件,可以生成 png pdf 等格式,这篇文章主要介绍了graphviz 2022最新安装教程适用初学者,需要的朋友可以参考下
    2023-02-02
  • 详细总结Python类的多继承知识

    详细总结Python类的多继承知识

    Python类的多继承知识是非常易于新手理解的,如果你是刚刚入门Python的话,欢迎参考本篇文章,本文对Python类的多继承知识作出了非常详细的解释,还有相关代码参考哦。
    2021-05-05
  • 10行Python代码计算汽车数量的实现方法

    10行Python代码计算汽车数量的实现方法

    这篇文章主要介绍了10行Python代码计算汽车数量的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10

最新评论