Python ImportError: No module named common.io_util 如何解决?

文件目录大概如下所示:
---_init_.py
---common
------io_util.py
------_init_.py
---config
------util.py
------_init_.py
---data_pip
------_init_.py
------importance_analysis
----------plot.py
----------_init_.py

然后在 plot.py 里面导入: from common.io_util import parse_line, from config.util import *

执行 plot.py 报错 ImportError: No module named common.io_util,试过网上说的好几种方法都不行,请问怎么解决


Python ImportError: No module named common.io_util 如何解决?

12 回复

你的 common 没在 path 里面。
办法 1:把根目录加入 sys.path 中
办法 2:从根目录运行 python ./data_pip/importance_analysis/plot.py


这个错误通常是因为你的Python环境中没有安装名为 common.io_util 的模块,或者模块的导入路径不对。

首先,你得确认这个模块到底在哪。common.io_util 看起来像是一个自定义的包,结构应该是这样的:

你的项目目录/
├── common/
│   ├── __init__.py
│   └── io_util.py
└── 你的主程序.py

检查你的项目目录里有没有一个叫 common 的文件夹,里面有没有 io_util.py 这个文件。__init__.py 文件(可以是空的)也必须存在,这样Python才会把它当作一个包。

如果文件结构是对的,但还是报错,那可能是Python找不到这个模块。有几种方法解决:

  1. 最直接的方法:在代码里改路径。 在你主程序的开头,加上这几行代码,把项目根目录添加到Python的模块搜索路径里:

    import sys
    import os
    # 获取当前文件的目录,然后找到它的父目录(项目根目录)
    current_dir = os.path.dirname(os.path.abspath(__file__))
    project_root = os.path.dirname(current_dir) # 假设你的主程序在项目根目录下
    sys.path.insert(0, project_root)
    

    然后你再 import common.io_util 应该就行了。

  2. 用相对导入(如果你的脚本在包内)。 如果你的主程序文件本身就放在 common 的同级或子目录里,并且你自己也把它当作一个模块来运行(而不是顶层脚本),可以尝试在 common 包内的其他模块中使用相对导入,比如 from . import io_util。但这对顶层脚本不适用,容易乱,新手不建议。

  3. 设置PYTHONPATH环境变量。 在运行程序之前,在终端里设置:

    # Linux/macOS
    export PYTHONPATH="/你的/项目/根目录/路径:$PYTHONPATH"
    # Windows
    set PYTHONPATH=C:\你的\项目\根目录\路径;%PYTHONPATH%
    

    然后再运行你的脚本。这个方法是一次性的,关掉终端就没了。

总结:先检查文件结构,然后优先用 sys.path 修改导入路径。

按照你的方式组织了一遍, 没问题啊.
是不是因为你把 init (双下划线), 写成 init (单下划线了)…

init.py 是双下划线

我这里写成单下划线_了,实际上我这边已经写成__了

我这里写成单下划线_了,实际上我这边已经写成__了

试试 在导入前 import sys
sys.path.append(common_path) 或者 from plot.common.io_util import parse_line

还有一种可能 pip uninstall common

init.py 应该修改为 init.py
然后在 init.py 中写
from .ou_util import parse_line

plot.py 中写入
from common import parse_line,

试试这样。

在 common 的__init__.py 加入 import sys sys.path.append(".")试试

在 pycharm 里面 选中那个包,右键 Mark Directory as -----》 Sources Root ,让这个文件变为一个包

上面就是我的意思

回到顶部