這篇文章不是寫(xiě)找不到模塊報(bào)錯(cuò)的,而是寫(xiě)我可以正常跑程序槽惫,但是pycharm有紅色的錯(cuò)誤提示(后文簡(jiǎn)稱(chēng)pycharm報(bào)錯(cuò))肯尺,也就是說(shuō),我代碼寫(xiě)的沒(méi)問(wèn)題躯枢,但是pycharm沒(méi)有正確理解我的項(xiàng)目結(jié)構(gòu)则吟。
我先是這么組織了一下項(xiàng)目目錄,src是存放所有代碼的目錄锄蹂,src/main.py是程序的入口
myproject
├── Dockerfile
├── README.MD
├── data
├── output
├── src
│ ├── action
│ ├── common
│ ├── data
│ ├── main.py
│ └── model
└── test
├── test.py
└── test_main.py
然后氓仲,當(dāng)我想在/src/data/a.py中導(dǎo)入/src/common/b.py時(shí)出現(xiàn)了問(wèn)題:
- 如果我用相對(duì)導(dǎo)入的方法
from ..common import b
導(dǎo)入,pycharm不報(bào)錯(cuò)得糜,運(yùn)行時(shí)會(huì)報(bào)錯(cuò)ImportError: attempted relative import beyond top-level package
敬扛,原因看第一篇引用吧,這里不贅述了 - 使用絕對(duì)導(dǎo)入的方法
- 使用
from src.common import b
朝抖, pycharm不報(bào)錯(cuò)啥箭,運(yùn)行時(shí)報(bào)錯(cuò)ModuleNotFoundError: No module named 'src'
。 - 使用
from common import b
治宣,運(yùn)行不報(bào)錯(cuò)急侥,pycharm報(bào)錯(cuò)(No module named 'common'
)。
- 使用
首先要理解侮邀,2.1是運(yùn)行時(shí)報(bào)錯(cuò)是因?yàn)閙ain.py的父級(jí)目錄src對(duì)python來(lái)說(shuō)壓根就不是包
坏怪,也就無(wú)從導(dǎo)入,正確的導(dǎo)入方法只能是2.2绊茧,那么pycharm報(bào)錯(cuò)就一定是誤報(bào)了铝宵。怎么不讓它誤報(bào)呢?打開(kāi)settings...|Project:xxx|Project Structure华畏,在這里你會(huì)發(fā)現(xiàn)鹏秋,pychrm只知道你的content root尊蚁,其它的都不知道,你要做的就是像圖中黃色框中所示侣夷,給它解釋清楚就好了枝誊。
目錄結(jié)構(gòu)設(shè)置