六个步骤,封装你喜爱的Python代码包
假设你很喜欢用同一段Python代码,里面有几个相关的小型函数,或者是含有几百行代码的中型模块。程序员可能会把它复制到不同的项目或存储库中,或者从特别设置的实用工具代码文件夹中导入这段代码。 这很正常。程序员在编写代码的过程中都会不断积累这些个性化的小工具。相比其他编程语言来说,Python更容易积累这些语句——这些代码非常实用。 如果无需复制,就可以轻松导入自己开发的小工具,并进行更新和维护,岂不是更好吗?如果不依赖于特定的文件或路径,让这些代码在不同的环境、机器和语境中都适用?如果可以将这些个性化工具版本化,并使相关代码清楚地反映出其依赖性呢?如果这个工具能为大众所用呢? 没错,它都可以做到。 当然,这个概念不是第一次提了。这就是通常在编程语言中使用模块、包和库的原因,特别是在Python的开发环境中。它的实现可使Python功能更加强大;只需简单的pip install 和 import就能获得BeautifulSoup的html解析功能或pandas的数据帧处理功能。 另外,人人都可以将自己的代码在PyPI上编写和发布(PyPI是Python包的官方索引:http://pypi.python.org/pypi),使它们与sklearn、requests或delorean(都是非常实用、流行的Python包)一样简单易得。以下是它的几点优势:
心动了吗?忘记那个旧的Python模块,开始制作小型Python包吧。 步骤一:命名 首先是命名。好的名字通常比较简短,便于在pip install 或 import 完成之后输入(尽管现在已经出现了“自动输入”);还要包含足够的信息便于理解,或者在安装完成后之后提示其中的内容。 requests负责处理HTTP请求、delorean负责日期和时间,sklearn负责提供机器学习框架,这些都是很好的例子。在为pandas管道包(由于pandas 通常以pd这样较短别名导入,故使用pdpipe:https://github.com/shaypal5/pdpipe)和缓存包(cachier:https://github.com/shaypal5/cachier)命名时,笔者也尝试过这些例子。 不过老实说,这些并不是固守的规则。流行的Python包都有pandas、 keras、 django、 boto、 jinja、 flask 和 pytorch等名称,大家能记住这些名字,所以读者也可以使用任何简短且可读的名称(例如,由于可读性问题,笔者将“Scikit-Learn Wrappers for FastText”缩写成了skift)。本文以chocobo为例。 步骤二:确定代码包的基本结构 接下来,通过几个简短的步骤,制作一种通用的结构: 1.用代码包的准确名称创建一个Github存储库,不要使用驼峰式或过多的个人发挥。然后在本地进行复制。 2.在该存储库中新建一个文件夹,用代码包的准确名称命名;这就是保存代码包的文件夹。这是一种规范,只需记住外部的chocobo 文件夹(在本例中)就是存储库的文件夹,而内部的chocobo 文件夹是包的文件夹。 3.将自己的模块和涉及到的任何其他模块放在内部的chocobo文件夹中。如果存在缺失的部分,请添加__init__.py 文件。 4.将用户直接调用的重要对象(通常是函数)从各自的模块中导入至__init__.py文件。有了代码包的命名空间,就可以使用这些函数、分类和变量了。如果愿意,也可以使用代码包的API。 5.虽然不是强制规定,笔者强烈建议在代码包或在存储库的根目录中都应包含一个 .gitignore 文件。 示例:https://github.com/github/gitignore/blob/master/Python.gitignore 现在有了一个结构,可以添加不同类型的文件组成代码包;内部文件夹保存的是包的代码,外部文件夹保存的是辅助包文件和其他与存储库相关的文件。 因此,初始模块chocobo.py如下所示:
新建存储库文件夹如下所示:
__init__.py 文件应如下所示:
那么在完成封装之后,chocobo包可以有这样的使用方法:
以上就是一些要点。 步骤三:许可问题 使用共享许可发布代码是较为可取的;如果要将自己的代码公开分享,程序员会想要在保留版权的前提下得到重用代码的许可,或者让那些扩展自己代码的人保证衍生代码可以自由使用。获得许可能轻松解决这些问题。 对于无足轻重的小项目,可以考虑MIT许可(https://choosealicense.com/licenses/mit/)。choosealicense.com(https://choosealicense.com/)提供了很多GitHub和开源社区中的实用建议。 无论选择哪种许可,都比根本不用要好。很多时候,在没有许可的情况下公开代码还不如不公开;如果程序员不明确自己对代码的所有权,大多数公司会因为可能造成的法律纠纷而放弃,从而失去许多潜在用户。 选择许可后,在存储库中创建LICENSE许可文件(不需要文件扩展名),并导入所选许可的确切文本。 步骤四:安装文件 现在创建Python封装工具所需的基本文件(以setuptools为例);setup.py.setup.py 包含了构建和发行时使用的实际指令。 (编辑:ASP站长网) |