diff --git a/README.md b/README.md index 3dfe56e..4f4e711 100644 --- a/README.md +++ b/README.md @@ -20,23 +20,29 @@ PyHubWeekly是一个精选Github上优质Python小工具的项目,宗旨, # 2020年 +### 十月 + +⭐️[第28期:数据分析终于迎来神器](./docs/28-pyhubweekly.md) + +⭐️[第27期:一款更为强大的Python包管理工具](./docs/27-pyhubweekly.md) + ### 九月 -⭐️[第26期](./docs/26-pyhubweekly.md) +⭐️[第26期:Python调度与自动化](./docs/26-pyhubweekly.md) -⭐️[第25期](./docs/25-pyhubweekly.md) +⭐️[第25期:功能强大的Python GUI框架](./docs/25-pyhubweekly.md) ### 八月 -⭐️[第24期](./docs/24-pyhubweekly.md) +⭐️[第24期:数据解析和验证](./docs/24-pyhubweekly.md) -⭐️[第23期](./docs/23-pyhubweekly.md) +⭐️[第23期:一款强大的Python打包、分发工具](./docs/23-pyhubweekly.md) ## 六月 -⭐️[第22期](./docs/22-pyhubweekly.md) +⭐️[第22期:快速创建漂亮文档](./docs/22-pyhubweekly.md) -⭐️[第21期](./docs/21-pyhubweekly.md) +⭐️[第21期:一款美化终端富文本内容的命令行工具](./docs/21-pyhubweekly.md) ## 五月 diff --git a/docs/25-pyhubweekly.md b/docs/25-pyhubweekly.md index a85bff3..2928022 100644 --- a/docs/25-pyhubweekly.md +++ b/docs/25-pyhubweekly.md @@ -42,7 +42,7 @@ from txtai.embeddings import Embeddings 下面,就演示如何用Embeddings搜索相似概念: -``` +```Python import numpy as np sections = ["US tops 5 million confirmed virus cases", diff --git a/docs/27-pyhubweekly.md b/docs/27-pyhubweekly.md new file mode 100644 index 0000000..d2d9d59 --- /dev/null +++ b/docs/27-pyhubweekly.md @@ -0,0 +1,135 @@ +## 前言 + +PyHubWeekly每周定期更新,精选GitHub上优质的Python项目/小工具。 + +我把PyHubWeekly托管到了Github,感兴趣的可以**搜索Github项目**[PyHubWeekly](Jackpopc/PyHubWeekly),如果喜欢,麻烦给个Star支持一下吧。此外,**欢迎大家通过提交issue来投稿和推荐自己的项目**~ + +本期为大家推荐GitHub上5个优质的Python项目,它们分别是: + +- **pyinspect** +- **jazzit** +- **mach-nix** +- **Papis** + +下面分别来介绍一下上述5个GitHub项目。 + +### pyinspect + +![img](https://mmbiz.qpic.cn/mmbiz_gif/DGwXCh99GDDlDQOyvDHzSObrS4BeIeqIiaT1gMAhSjzIp41DpyfY6EATYGw3BYBPkKwMW1ZBFs3NUiaNJQqGyIjw/640?wx_fmt=gif) + +在大一些的项目开发过程中,会写很多实现不同功能的函数,久而久之,很多函数的名称都记不太清。 + +pyinspect[1]可以给你提供强有力的帮助! + +你不仅可以在Python代码中像调用函数一样使用它,也可以在命令行下像命令行工具那样使用pyinspect。 + +pyinspect允许根据函数和类方法的名称搜索它们,并打印出一个清晰的列表,其中包含满足搜索条件的所有函数。你还可以使用pyinspect在终端中直接打印函数的代码,这样就可以在不打开任何文件的情况下提示它所做的工作。 + +### jazzit + +如果你的代码在支撑过程中报错了,你该怎么能够感知到这个错误? + +当我们执行一个运行时间较长的工程时,不可能一直盯着屏幕,直到它运行完成。 + +但是,如果这期间它出现了错误,我们却没有感知,这样势必会浪费掉大量时间。 + +jazzit[2]可以你的代码再运行/出错时播放对应的声音,以此来给你对应的提醒。 + +**安装** + +``` +$ pip install jazzit +``` + +**示例** + +```Python +from jazzit import error_track + +@error_track("curb_your_enthusiasm.mp3", wait=7) +def run(): + for num in reversed(range(10)): + print(10/num) + +if __name__ == "__main__": + run() +``` + +这样,你就可以对你的代码运行情况有更加直观的感知! + +### mach-nix + +![img](https://mmbiz.qpic.cn/mmbiz_jpg/DGwXCh99GDDlDQOyvDHzSObrS4BeIeqI8Vm5KIeGiaNcq1KjsTcAxPE52Jv8GSEZwNMUq84G8vZ6ss7QqOd8GJA/640?wx_fmt=jpeg) + +目前Python包/环境管理工具可以说是有非常多的选择,`pip`、`pipenv`、`conda`等。 + +但是,现有的Python软件包管理工具都无法实现可复用性,而且需要额外的虚拟化层。 + +而mach-nix旨在通过提供一种简单的使用Nix的方式来解决这些问题。 + +Nix是一款操作系统包管理工具,和RPM、APT一样。 + +通过与Nix的结合,mach-nix使得创建和共享Python环境变得更加容易,大大提升了它的可复用性和可移植性。 + +**安装** + +可以通过pip进行安装: + +``` +$ pip install git+git://github.com/DavHau/mach-nix@3.0.1 +``` + +也可以通过nix进行安装: + +``` +$ nix-env -if https://github.com/DavHau/mach-nix/tarball/3.0.1 -A mach-nix +``` + +下面,来看一下用mach-nix通过requirements.txt创建Python环境的示例: + +``` +$ mach-nix env ./env -r requirements.txt +``` + +### Papis + +![img](https://mmbiz.qpic.cn/mmbiz_png/DGwXCh99GDDlDQOyvDHzSObrS4BeIeqIV2Aq5bibOo7hOQhH8XobTyFAYeAYTicRHz4nD6sz9SAX9qweR5obAvIg/640?wx_fmt=png) + +Papis是一个功能强大且高度可扩展的基于命令行的文档和书目管理工具。 + +它可以从Dropbox、rsync、OwnCloud、GoogleDrive等主流网盘进行文档同步。也支持与其他同事进行共享文档,便于团队协作。 + +Papis还支持文档导出,可以导出bibtex、yaml等格式。 + +在兼容方面,Papis做的也很好。它可以使用`papis-zotero`和Zotero这款强大且开源的文献管理工具进行结合使用。 + +**示例** + +首先,安装papis: + +```shell +$ pip install papis +``` + +其次,下载2份示例PDF文档: + +``` +$ wget http://www.gnu.org/s/libc/manual/pdf/libc.pdf +$ wget http://www.ams.org/notices/201304/rnoti-p434.pdf +``` + +然后,把这2份文档加入到库中,方便管理: + +```shell +$ papis add libc.pdf --set author "Sandra Loosemore" --set title "GNU C reference manual" --set year 2018 --set tags programming --confirm +# Get paper information automatically via de DOI +$ papis add --from doi 10.1090/noti963 --set tags programming rnoti-p434.pdf +``` + +最后,可以通过papis进行编辑和导出: + +```shell +$ papis open +$ papis edit +$ apis export --all --bibtex > mylib.bib +``` \ No newline at end of file diff --git a/docs/28-pyhubweekly.md b/docs/28-pyhubweekly.md new file mode 100644 index 0000000..74de1d7 --- /dev/null +++ b/docs/28-pyhubweekly.md @@ -0,0 +1,193 @@ +## 前言 + +PyHubWeekly每周定期更新,精选GitHub上优质的Python项目/小工具。 + +我把PyHubWeekly托管到了Github,感兴趣的可以**搜索Github项目**[PyHubWeekly](Jackpopc/PyHubWeekly),如果喜欢,麻烦给个Star支持一下吧。此外,**欢迎大家通过提交issue来投稿和推荐自己的项目**~ + +本期为大家推荐GitHub上5个优质的Python项目,它们分别是: + +- **PandasGUI** +- **Pippi** +- **pylambdarest** +- **Fixit** +- **isort** + +下面分别来介绍一下上述5个GitHub项目。 + +### PandasGUI + +![img](https://mmbiz.qpic.cn/mmbiz_png/DGwXCh99GDDlDQOyvDHzSObrS4BeIeqIyQiafTsDxPq6WxaoHfAXVPgFWStGMcWp2cQe9IuRPyP6af3N4boEReQ/640?wx_fmt=png) + +学习Python数据分析,有2个工具包一定会被用到,分别是`numpy`和`pandas`。 + +`pandas`可以说是Python数据分析中的神器,它可以在Python语言中实现很多SQL语句的功能。而且,还具备很多数据清洗和处理的附加功能。 + +但是,对比于很多数据库工具,它有一点不好的地方就是,它在可视化方面做的很差。 + +而**PandasGUI**的出现,让我大为经验,它能够直接把pandas的DataFrames进行可视化,让我们数据分析过程中对数据有一个更加清晰的认知。 + +**安装** + +```shell +$ pip install pandasgui +或 +$ pip install git+https://github.com/adamerose/pandasgui.git +``` + +**用法** + +首先,创建一个简单的DataFrames: + +```Python +import pandas as pd +from pandasgui import show +df = pd.DataFrame(([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=['a', 'b', 'c']) +show(df) +``` + +如果你将代码作为脚本而不是在IPython或Jupyter中运行,则需要这样做: + +```Python +show(df, settings={'block': True}) +``` + +### Pippi + +从事计算机视觉,能够找到很多和图像处理相关的Python库。从事自然语言处理,NLP相关的工具包也是层出不穷。 + +而音乐作为一种常见的多媒体形式,却鲜有相关的Python工具包。 + +如果你想通过代码处理一段音乐,然后对它进行控制和调整,就会不知所措、无从下手。 + +Pippi[3]就可以满足你的这个需求,它是一款用于Python的音乐处理库,它包含了一些方便的音乐数据结构,如SoundBuffer和Wavetable,使得处理音乐变得非常简单。除此之外,它还可以对音乐格式进行**转换**。 + +```Python +from pippi import dsp + +sound1 = dsp.read('sound1.wav') +sound2 = dsp.read('sound2.flac') + +# Mix two sounds +both = sound1 & sound2 + +# Apply a skewed hann Wavetable as an envelope to a sound +enveloped = sound * dsp.win('hann').skewed(0.6) + +# Or just a sine envelope via a shortcut method on the `SoundBuffer` +enveloped = sound.env('sine') + +# Synthesize a 10 second graincloud from the sound, +# with grain length modulating between 20ms and 2s +# over a triangle shaped curve. +cloudy = enveloped.cloud(10, grainlength=dsp.win('tri', dsp.MS*20, 2)) +``` + +### pylambdarest + +当让你用Python写一个REST API接口时,大概率会想到Flask。 + +而pylambdarest[4]是Flask之外一个非常不错的选择。 + +它是一款轻量级的框架,用于使用AWS Lambda + API网关构建REST API。 + +与大多数其他Python框架不同,它不提供任何路由功能,路由由API网关本身处理。 + +下面通过一个示例来对于pylambdarest与其他工具包的不同之处, + +**其他工具包** + +```Python +import json + +def handler(event, context): + body = json.loads(event["body"]) + query_params = event["queryStringParameters"] + path_params = event["pathParameters"] + + return { + "statusCode": 200, + "body": json.dumps({ + "message": f"Hello from AWS Lambda {body['name']}!!" + }) + } +``` + +**pylambdarest** + +```Python +from pylambdarest import route + +@route() +def handler(request): + body = request.json + query_params = request.query_params + path_params = request.path_params + + return200, {"message": f"Hello from AWS Lambda {body['name']}!!"} +``` + +当使用API网关和python Lambdas时,最常见的模式是由代理API网关资源触发一个唯一的Lambda。Lambda然后使用类似于Flask的框架来完成所有的路由。在API Gateway + Lambda上下文中,作者认为路由应该由API Gateway本身处理,然后将请求转发给针对每个资源或endoint的特定Lambda函数。 + +### Fixit + +Fixit[5]是一个对Flake8进行补充的lint框架。它基于LibCST,这使得提供自动修复成为可能。通过模式匹配、测试工具包和实用工具助手(例如范围分析),可以很容易地构建Lint规则。它是优化的效率,易于定制。 + +**安装** + +``` +$ pip install fixit +``` + +通过配置fixit规则,可以对Python代码进行静态检查,能够有效的提升Python代码的质量。 + +### isort + +Python是一门对语法要求相对宽松的编程语言,因此对于很多Python初学者来说这门语言非常简单。 + +但是,Python中有很多约定成俗的规则,通过这个规则的约束和遵从,能够提升Python代码的可读性,降低维护成本。 + +以Python代码中的`import`为例,就有一定的规则,内置模块、自定义模块、第三方模块的导入都是有一定顺序的。 + +isort[6]就是针对Python中`import`部分自动规范化的工具包,通过使用isort,可以迅速按照规则调整模块导入部分。 + +使用isort之前: + +```Python +from my_lib import Object + +import os + +from my_lib import Object3 + +from my_lib import Object2 + +import sys + +from third_party import lib15, lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8, lib9, lib10, lib11, lib12, lib13, lib14 + +import sys + +from __future__ import absolute_import + +from third_party import lib3 + +print("Hey") +print("yo") +``` + +使用isort之后: + +```Python +from __future__ import absolute_import + +import os +import sys + +from third_party import (lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8, + lib9, lib10, lib11, lib12, lib13, lib14, lib15) + +from my_lib import Object, Object2, Object3 + +print("Hey") +print("yo") +``` \ No newline at end of file