python下包管理框架記錄
測試環境:ubuntu16.04下的~/目錄下。
一、我們的測試目錄結構如下:
當前目錄在:~/chap7,使用tree命令看到當前目錄下的文件及文件夾結構如下:

其中三個__init__.py為空文件,
simpledatasetloader.py里定義一個類:

simplepreprocessor.py里定義另一個類:

在根文件knn.py中導入格式如下:

在knn.py這樣配置,我們希望from包直接導入包中模塊的類名。
二、模塊與包
模塊:實質上就是一個以.py結尾的文件,可以被其他py文件調用。
包:即包所在的文件夾里包含一個__init__.py的文件,即在這里的pyimagesearch、datasets、preprocessing分別為三個包。
三、運行測試
運行:python knn.py顯示結果如下:

原因是,我們沒有配置__init__.py文件。
我們在python中,from sklearn.preprocessing import LabelEncoder,則可以直接從目錄包中導入類名,
從sklearn的git目錄下的neighbors的__init__.py看配置如下:

因此,我們將preprocessing文件夾下的__init__.py添加如下:

將datasets文件夾下的__init__.py添加如下:

保存后,此時,再次執行python knn.py即可正確顯示如下:

因此,在以包為管理方式,來配置不同的包管理時,可參考python中某個包的配置方式來配置。
如果在datasets下還有其它模塊需要導入,可按此方式即可。
