這篇文章不是寫找不到模塊報錯的,而是寫我可以正常跑程序,但是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,其它的都不知道,你要做的就是像圖中黃色框中所示,給它解釋清楚就好了。
目錄結構設置