这篇文章不是写找不到模块报错的,而是写我可以正常跑程序,但是pycharm有红色的错误提示(后文简称pycharm报错),也就是说,我代码写的没问题,但是pycharm没有正确理解我的项目结构。
我先是这么组织了一下项目目录,src是存放所有代码的目录,src/main.py是程序的入口
myproject
├── Dockerfile
├── README.MD
├── data
├── output
├── src
│ ├── action
│ ├── common
│ ├── data
│ ├── main.py
│ └── model
└── test
├── test.py
└── test_main.py
然后,当我想在/src/data/a.py中导入/src/common/b.py时出现了问题:
- 如果我用相对导入的方法
from ..common import b
导入,pycharm不报错,运行时会报错ImportError: attempted relative import beyond top-level package
,原因看第一篇引用吧,这里不赘述了 - 使用绝对导入的方法
- 使用
from src.common import b
, pycharm不报错,运行时报错ModuleNotFoundError: No module named 'src'
。 - 使用
from common import b
,运行不报错,pycharm报错(No module named 'common'
)。
- 使用
首先要理解,2.1是运行时报错是因为main.py的父级目录src对python来说压根就不是包
,也就无从导入,正确的导入方法只能是2.2,那么pycharm报错就一定是误报了。怎么不让它误报呢?打开settings...|Project:xxx|Project Structure,在这里你会发现,pychrm只知道你的content root,其它的都不知道,你要做的就是像图中黄色框中所示,给它解释清楚就好了。