Python | 导包 ModuleNotFoundError: No module named 'xxx'

问题描述

现有的目录结构

- models
|- officals
||- __init__.py
||- utils.py
||- wide_deep
|||- census_dataset.py

其中,census_dataset.py 有这么一句导包 from official.utils.flags import core as flags_core

使用 pycharm 执行 census_dataset.py 没有问题,而在命令行执行报错

....\models\official\wide_deep> python census_dataset.py
Traceback (most recent call last):
  File "census_dataset.py", line 32, in 
    from official.utils.flags import core as flags_core
ModuleNotFoundError: No module named 'official'

...\models>python .\official\wide_deep\census_dataset.py
Traceback (most recent call last):
  File "census_dataset.py", line 32, in 
    from official.utils.flags import core as flags_core
ModuleNotFoundError: No module named 'official'

原因分析

sys.path:指定用于模块搜索路径的列表,默认包括了系统环境变量和要执行的文件所在路径

在 pycharm 执行时,会自动在 sys.path 中插入 '...\\models\\official\\wide_deep', '...\\wide_deep\\models',所以由于有 '...\\wide_deep\\models' 可以搜索到 official 包

而在命令行执行时,只会在 sys.path 中插入执行的 python 文件所在路径(即'...\\models\\official\\wide_deep'),但没有插入 '...\\wide_deep\\models' 到 sys.path,所以找不到 official 包

解决方案

方案一:动态修改路径

在 census_data.py 中增加一行代码

sys.path.append('...\\models')

之后,在命令行也能执行。

方案二:修改 PYTHONPATH 变量
1)打开 ~/.bashrc

vim ~/.bashrc

2)添加 pythonpath

export $PYTHONPATH:/home/hx/sagr

3)重新加载配置文件

source ~/.bashrc

总结

当遇到已经安装完成的包,却发生 ModuleNotFoundError 时,就检查一下 sys.path 是否包括该包所在的路径

你可能感兴趣的:(Python | 导包 ModuleNotFoundError: No module named 'xxx')