1. 程式人生 > >你所不知道的 【ModuleNotFoundError: No module named ''; '' is not a package】

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

is not a package

一、背景介紹

1. 工具目錄結構

為了便於統一管理一些小工具,在本地創建了一個mytools的目錄,子目錄的結構如下:

技術分享圖片


2.python搜索路徑

在環境變量中,增加了PYTHONPATH的設置,value為‘e:\mytools\lib\python‘。


二、問題描述

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

技術分享圖片


三、解決思路及方法

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

1.難道是項目目錄結構和工具目錄結構的差異造成的?

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

技術分享圖片

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


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. 搜索路徑沒生效?

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

技術分享圖片

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

技術分享圖片

到此就更讓我疑惑了,addhosts確實是個package!也能識別出addhosts是個類庫,為什麽會提示‘addhosts’ is not a package呢 ?技術分享圖片


4.峰回路轉!

抱著試試看的心態,我在項目中新建了python file,隨便命名為addhoststest,然後將addhosts.py中的代碼全部粘貼到addhoststest.py文件中。

技術分享圖片

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

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

技術分享圖片


四、總結

  1. 可以設置PYTHONPATH環境變量,來增加python的搜索路徑;

  2. package裏的__init__.py文件,可以為空文件;

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


本文出自 “樂學園” 博客,請務必保留此出處http://2338053.blog.51cto.com/2328053/1982977

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