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下还有其它模块需要导入,可按此方式即可。