设为首页 - 加入收藏 华夏网 ()- 华夏领先的王中王论坛资讯站长网站!
热搜: 市场 统一 2017 美国
当前位置: 主页 > 红姐论坛 > 正文

六个步骤,封装你喜爱的Python代码包

发布时间:2019-10-08 21:28 所属栏目:[红姐论坛] 来源:读芯术
导读:假设你很喜欢用同一段Python代码,里面有几个相关的小型函数,或者是含有几百行代码的中型模块。程序员可能会把它复制到不同的项目或存储库中,或者从特别设置的实用工具代码文件夹中导入这段代码。 这很正常。程序员在编写代码的过程中都会不断积累这些个

假设你很喜欢用同一段Python代码,里面有几个相关的小型函数,或者是含有几百行代码的中型模块。程序员可能会把它复制到不同的项目或存储库中,或者从特别设置的实用工具代码文件夹中导入这段代码。

六个步骤,封装你喜爱的Python代码包

这很正常。程序员在编写代码的过程中都会不断积累这些个性化的小工具。相比其他水果奶奶论坛语言来说,Python更容易积累这些语句——这些代码非常实用。

如果无需复制,就可以轻松导入自己开发的小工具,并进行更新和维护,岂不是更好吗?如果不依赖于特定的文件或路径,让这些代码在不同的环境、机器和语境中都适用?如果可以将这些个性化工具版本化,并使相关代码清楚地反映出其依赖性呢?如果这个工具能为大众所用呢?

没错,它都可以做到。

当然,这个概念不是第一次提了。这就是通常在水果奶奶论坛语言中使用模块、包和库的原因,特别是在Python的开发环境中。它的实现可使Python功能更加强大;只需简单的pip install 和 import就能获得BeautifulSoup的html解析功能或pandas的数据帧处理功能。

另外,人人都可以将自己的代码在PyPI上编写和发布(PyPI是Python包的官方索引:http://pypi.python.org/pypi),使它们与sklearn、requests或delorean(都是非常实用、流行的Python包)一样简单易得。以下是它的几点优势:

  • 即使只有很少人使用,共享自己的代码仍是一件很有趣的事;程序员可以在工作、社群活动或求职面试中分享并展示自己的劳动成果。
  • 通过强制性地整理和记录代码,公开给同行进行评价,从而改进代码。
  • 它还能弥补社群的不足。你会惊讶地发现,很多人会注意到你的序列化十分高效,比如将HTTP报头序列化到JSON。或者发现自己创建的用来验证输入MongoDB查询文档修饰符的工具有多么实用。

心动了吗?忘记那个旧的Python模块,开始制作小型Python包吧。

六个步骤,封装你喜爱的Python代码包

图1: Python dust

步骤一:命名

首先是命名。好的名字通常比较简短,便于在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如下所示:

  1. """My chocobo cooking script.""" 
  2. import os 
  3. def chocobo_roast(num_guests, hotness_level): 
  4.  # amazing python code here 

新建存储库文件夹如下所示:

  1. chocobo/ 
  2.  chocobo/ 
  3.  __init__.py 
  4.  chocobo.py 
  5.  .gitignore 

__init__.py 文件应如下所示:

  1. """chocobo is a python package for delicious Chocobo recipes.""" 
  2. from .chocobo import ( 
  3.  chocobo_roast, 

那么在完成封装之后,chocobo包可以有这样的使用方法:

  1. """I'm a script or a different package using chocobo.""" 
  2. import chococbo 
  3. def my_feast(num_guests): 
  4.  snacks = bobbish() 
  5.  main_course = chocobo.chocobo_roast(num_guests, 0) 
  6.  dressing = szechuan_chicken_mcnugget_sauce() 

以上就是一些要点。

步骤三:许可问题

使用共享许可发布代码是较为可取的;如果要将自己的代码公开分享,程序员会想要在保留版权的前提下得到重用代码的许可,或者让那些扩展自己代码的人保证衍生代码可以自由使用。获得许可能轻松解决这些问题。

对于无足轻重的小项目,可以考虑MIT许可(https://choosealicense.com/licenses/mit/)。choosealicense.com(https://choosealicense.com/)提供了很多GitHub和开源社区中的实用建议。

无论选择哪种许可,都比根本不用要好。很多时候,在没有许可的情况下公开代码还不如不公开;如果程序员不明确自己对代码的所有权,大多数公司会因为可能造成的法律纠纷而放弃,从而失去许多潜在用户。

选择许可后,在存储库中创建LICENSE许可文件(不需要文件扩展名),并导入所选许可的确切文本。

步骤四:安装文件

现在创建Python封装工具所需的基本文件(以setuptools为例);setup.py.setup.py 包含了构建和发行时使用的实际指令。

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章