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 <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')

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

总结

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

同步更新:https://www.jianshu.com/p/7b2b0cf1c848

转载于:https://my.oschina.net/u/3946357/blog/3078897

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值