美文网首页
Python | 导包 ModuleNotFoundError:

Python | 导包 ModuleNotFoundError:

作者: 胖三斤66 | 来源:发表于2019-07-25 12:04 被阅读0次

    问题描述

    现有的目录结构

    - 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 <module>
        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 <module>
        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:

          本文链接:https://www.haomeiwen.com/subject/bjacrctx.html