你所不知道的 【ModuleNotFoundError: No module named ''; '' is not a package】

1、背景介紹html

    1. 工具目錄結構
python

    爲了便於統一管理一些小工具,在本地建立了一個mytools的目錄,子目錄的結構以下:
網絡

1d1aa643fbbbd451c378fb686c2d4c4b.png


    2.python搜索路徑
ide

在環境變量中,增長了PYTHONPATH的設置,value爲‘e:\mytools\lib\python‘。工具


2、問題描述測試

    作好準備工做後,信心滿滿的運行了一把,結果倒是從未見過的‘ModuleNotFoundError: No module named 'addhosts.argument_exception'; 'addhosts' is not a package’的錯誤。
3d

af8875dfbf30c3c445743f69db10508a.png


3、解決思路及方法htm

    面對這個錯誤,甚是不知所云啊!在編寫代碼的過程當中執行是經過的呀。
blog

    1.難道是項目目錄結構和工具目錄結構的差別形成的?
ci

    想到這,我將addhost.py文件,由bin目錄調整到lib\python目錄下。

96d8a7fbc2fde51a285aaee5bed51b52.png

    目錄結構調整後,工具確實能夠正常工做了,但這樣的目錄結構不是我想要的。


    2. 'addhosts' is not a package?

    lib下的addhosts中確實是有__init__.py這個文件啊,爲何會提示'addhosts' is not a package ? 是個人__init__py文件有問題嗎?致使python不能將addhosts識別爲一個包?

    因而我翻閱了python書籍,經過網絡查詢了資料,對比了python第三方庫site-packages下的庫文件。

    最終確認問題不在__init__.py文件上。


    3. 搜索路徑沒生效?

    想到這趕忙驗證了一下,路徑在!

13a611ba87093882fbcd0c6e821ca3ee.png    

    又到pycharm中進行了二次確認。通過查看,python External Libraries裏已經識別到了addhosts庫了。

7759fd325e8d142d0270060a0a123a5c.png

    到此就更讓我疑惑了,addhosts確實是個package!也能識別出addhosts是個類庫,爲何會提示‘addhosts’ is not a package呢 ?j_0065.gif


    4.峯迴路轉!

    抱着試試看的心態,我在項目中新建了python file,隨便命名爲addhoststest,而後將addhosts.py中的代碼所有粘貼到addhoststest.py文件中。

 3d8ac375f4fe692472064fa4b20b172f.png

    run一下,結果居然成功了。

    至此,終於明白失敗的緣由了。爲了驗證個人推斷,又作了個小實驗。在項目目錄下,新建了html.py文件,導入htmlpackage下的類。運行結果也出現了is not a package的錯誤。

6d1318ace1c302b38655fd168af38f15.png


4、總結

  1. 能夠設置PYTHONPATH環境變量,來增長python的搜索路徑;

  2. package裏的__init__.py文件,能夠爲空文件;

  3. 運行文件名稱不要與類庫中的package同名。

相關文章
相關標籤/搜索