|
|
|
|
移动端

2.3.4 Python的工程结构

《精通数据科学:从线性回归到深度学习》第2章Python安装指南与简介:告别空谈,本章介绍数据科学中最常用的IT工具:Python以及相关第三方库。本节为大家介绍Python的工程结构。

作者:唐亘来源:人民邮电出版社|2018-05-24 09:25

技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

2.3.4 Python的工程结构

本节将讨论Python项目的工程结构。这部分内容对初学者来讲,可能比较抽象。如果读者发现下面的文字生涩难懂,可先跳过此节,这并不影响本书其他章节的阅读。

假设小安已经开发好了一些脚本,并把它们放在某个文件目录下。现在,作为读者的你在开发新项目的时候,希望能像使用NumPy这种第三方库一样复用之前的代码。这应该如何实现呢?答案是创建充满“魔力”的__init__.py文件。具体来看下面这个例子[4]。

[4] 完整的实现请参考随书配套的代码/ch02-python/mini_project/。

首先创建一个mini_project的目录,下面有两个子目录:components和tests。而components下面有两个Python脚本,即counter.py和selecter.py,如图2-13a所示。

(1)在counter.py脚本中定义了wordCount函数。

(2)在selecter.py中定义了getFrequentItem函数。这个函数依赖于上面提到的wordCount函数,因此在脚本的开头部分使用如下命令来导入它:

  1. 1 |  from mini_project.components.counter import wordCount 

(3)tests/test_selecter.py是程序的入口,也就是将被直接运行的脚本,这个脚本会调用getFrequentItem函数。类似地,在此脚本开头导入getFrequentItem。

  1. 1 |  from mini_project.components.selecter import getFrequentItem 

如果这时使用“python test_selecter.py”命令来运行程序,将会得到如下的错误提示:

  1. 1 |  ImportError: No module named mini_project.components.selecter 

这是因为Python并没有将目录mini_project当成一个可以使用的程序库,所以导入失败。想要修复这个bug,只需如图2-13b一样在各个目录下创建一个空的__init__.py 文件。

从本质上讲,Python的库其实就是一个包含__init__.py文件的目录。__init__.py定义了这个库的属性和方法。当我们使用import命令导入一个库时,其实是在导入__init__.py这个文件。通常情况下,不需要在它里面定义任何内容,只需一个空文件即可,Python会自动按默认设置处理。但如果没有这个文件,Python就不会把对应目录当作第三方库,我们也就没办法导入和使用它了。

另外值得提醒的是,当要导入一个库时,需要确保它对应的目录在系统路径下可见。说得通俗一点就是在“sys.path”下面能找到对应的库目录。如果没有,则需要将相应的路径加到“sys.path”里(读者有没有发现,“sys.path”其实就是一个list。)。



喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

网管员必读—服务器与数据存储

《网管员必读—服务器与数据存储》全面、系统地介绍了在中、高级网络管理和网络工程实施中两个重要方面的主流技术和应用:硬件服务器和数据...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊