PyCon2018 回顾 (Part 1)

740 阅读6分钟

原作者laixintao

原文发于作者个人博客,点击查看原文,掘金已获得转载授权。再次感谢作者。

导读:上个月的 PyCon 有 170 多个视频在 Youtube 上,网友 @laixintao 写了个简单看后感,目前包括对如下几个演讲的回顾:Python 依赖管理的未来?importlib.resources in Python3.7;Pythoner 为什么要了解 Systemd?命令行 UI 也需要设计。

1. Python 依赖管理的未来?

像 npm 这种工具一般都会产生 .lock 文件的,将版本锁死。Python 并没有这种 lock 文件,这样的话我们部署的时候就有不确定性,可能最终的环境会和预期不一致(What do you want 和 What do you need 的问题)。有一种方案就是 pip freeze > requirements.txt ,但是这种导出的依赖是扁平的,你不是一个包是你项目的依赖,还是你所依赖的 Flask 的依赖的依赖。

所以就有了 Pipenv,使用它来安装,就会产生一个 Pipfile,放着人类可读的依赖包,每次安装之后就会自动产生一个 .lock 文件,是一个 json 格式的文件,对机器处理很友好。每一个依赖都带有 sha256 hash,可以将最终部署的环境锁定。此外,Pipenv 还带有很多非常 Nice 的功能,比如画依赖图、管理 venv、切换 Python 版本等等。需要注意的是,这和 setup.py 是完全不一样的东西,一个是应用的依赖管理,一个是库的打包(这个好问题是最后一位观众提出的)。

推荐指数:5 (讲了Python打包的历史,现场带有Nice的演示,所有的问题都有满意的回答,演讲思路清晰)

演讲者:Kenneth Reitz(requests作者,应该所有的 Pythoner 都知道这个人吧),演讲5天前刚从 Heroku 跳槽到 DigitalOcean。

相关项目:pipPipenv

Youtube:Kenneth Reitz – Pipenv: The Future of Python Dependency Management – PyCon 2018

2. importlib.resources in Python3.7

目前来说,如果你想在你的库或者应用中添加静态文件(类似分词这种元数据的话),方法是放到一个目录中,然后在代码中拼出来路径,打开并读取这个文件。首先这样代码冗长(虽然Python来写只需要5行左右)但是依然很长,并且如果你的程序是从 zip 文件中执行的话,那么就有问题了,你打开文件的时候并不会有这个系统路径存在。

所以 LinkedIn 的 Warsaw (这个库主要是他们开发的)给出了一个 Talk 介绍 Python3.7 中新增的 importlib.resource 库的解决方案:在静态文件所在的文件夹添加一个 __init__.py 文件,那么这个文件夹就变成了一个“module”,使用 importlib.resources 中只要是可以 import 的 module,那么这个 module 中的静态文件就可以通过 importlib 来读取。解决了 zip 文件的情况,还提供了很多 API,还有一些效率上的提升。以后的程序中感觉用这种方式加载静态文件比较靠谱。

推荐指数:3

演讲者:Warsaw from Linkedin

相关项目:github.com/linkedin/sh…importlib.resources

Youtube: Barry Warsaw – Get your resources faster, with importlib.resources – PyCon 2018

3. Pythoner为什么要了解Systemd?

Instagram 是业界有名的 Python 用户,他们的博客经常会发表干货,演讲也通常价值很高。不过这个 talk 感觉没有发挥出 Instagram 一贯的水平啊,嘉宾嗓子有点沙哑,加上口音,听懂的难度有点大,理解万岁哈哈。

内容是关于 Systemd 的,教你如何将 Python 程序作为系统的 service 来管理,涉及了服务管理的小历史,这部分是一个不错的 Systemd 入门教程吧。后半部分推销了 facebook 的一个项目。

pystemd 是一个 libsystemd 的 Python wrapper,提供了很多不错的 feature,例如运行一个命令时,将整个系统变成 Read-only 的;或者提供一个与系统的 tmp 相隔离的 tmp; 或者提供一个网络的 firewall,限制只有特定的 IP 可以访问等;或者限制 CPU 和内存等资源的使用,之前我想实现一个多租户的 Python 环境,这个库看起来可以满足我大部分的需求。当然,基本也有所有 systemd 的相关操作。后面 Demo 部分很不错,虽然最后一个貌似失败了。

推荐指数:4

演讲者:Alvaro Leiva Geisse from Instagram & Facebook

相关项目:systemd,pystemd

Youtube:Alvaro Leiva Geisse – Systemd: why you should care as a Python developer – PyCon 2018

4. 命令行UI也需要设计

这是去年的 PyCon 的视频,最近从“稍后观看”里面找到的,发现自己还没看完,就顺带看了。

黑乎乎的命令行并不是没有UI了,相反,UI的复杂程度不亚于GUI,也需要精心的设计。我使用 PostgreSQL 和 MySQL 从没依赖过 GUI, 因为 mycli 和 pgcli 实在是太方便了。命令历史,自动补全,颜色,拿什么 GUI 跟我换我都不换!这两款项目的作者来自 Amjith Ramanujam 来自 Netflix,演讲也很精彩。

命令行不像GUI,GUI上面如果有什么新 feature,就会有一个新的选项或者 icon,用户就知道了。但是命令行呢,要么花时间读手册,要么你有个不错的朋友跟你说一些技巧,不然你很难发现一些实用的 feature。这里演讲者举了几个例子,有时候你要想办法让用户见到这些 nice feature。

第二点,注意力要放在用户身上,首先想到怎么用最好,而不是首先想到难以实现。这里作者提到实现 mycli 的时候,要做到根据数据库的数据自动提示,但是市面上并没有开源的 SQL 引擎,要自己写一个工作量和难度实在太大了,但是作者也实现了。

第三点,配置是罪恶之源,只留给用户去配置一些主观的东西,比如颜色。其他的不要去让用户决定。

最后就是一段演示了,展示了怎么写命令行GUI,虽然写了十几行而已,但是已经完爆很多 REPL 了。

推荐指数: 4

演讲者:Amjith Ramanujam from Netflix

相关项目:myclipgclifish-shellbpythonprompt_toolkit

Youtube:Amjith Ramanujam Awesome Command Line Tools PyCon 2017

先发这些吧,后面遇到好看的继续更,大家如果看到质量高的也欢迎推荐。2018年貌似有170多个视频,全部看完要好久,一起看的话大家可以互通质量,节省时间啊。