如何让你的Python应用程序分发变得很容易?
开始今天的话题前,我想先讲一个我很早之前做的尝试。无意间发现一份diffpdf源代码,作者提供了Linux的编译版本,但没有Windows编译版本,我经过努力,编译成功了,并放到了我的博客上(http://rubypdf.com),受到了欢迎,diffpdf也从一种半死不活的状态慢慢出名了起来。
这是否说明,对最终使用者来说,东西不仅要好,还得用起来方便。这点对于Python应用程序来说呢?平时我们部署一个Python程序,一般怎么做?
下载Python安装包
设置虚拟环境
安装各种依赖包
安装程序
因为环境的变化,各种报错调试
。。。
如果不需要装乱七八糟的前期准备工作,就可以顺利使用起来, 是不是很期待?
GitHub上有个小工具名叫q(https://github.com/harelba/q),获得超过7.3K的stars,基于Python开发,实现了直接写SQL查询CSV或者TSV,就像这样
q -H -O -b -d "," "select * from iris.csv limit 10"
它的原理很简单,把CSV(TSV)导入到SQLite 内存数据库的表中,然后对SQLite执行各种查询操作。
也许你会疑惑这么一个小软件,咋会有那么多人喜欢,而且又是Python编写的。
这一方面得益于它的批量查询CSV的功能,另外一个重要的原因,它的发行版非常小(便于发行)功不可没,
MacOS, 5.0M
Windows, 6.53M
Linux ,10.2M
下载就可以使用的,不需要再准备Python环境了,是不是很方便。
你是否好奇,它使用什么软件来打包的呢?
答案是PyInstaller(https://www.pyinstaller.org/)。
上次我们尝试过Nuikta(MacOS 和Windows),它可以把Python代码转为c再进行编译,可以保护Python代码,还可以打包便于发行,下面对这两款打包工具做一个简单的对比。
下面是使用Nuikta,PyInstaller和原始python代码处理一个sales.csv(来自https://relational.fit.cvut.cz/dataset/SalesDB)的例子,从下图看csv
总计6758126行(包含文件头),整个文件506M
编码是带BOM表带UTF8
分隔符为“;"
9个字段
执行速度上原生>Nuikta>PyInstaller,但相差不大。
在编译上,
Nuikta对CPU的占用非常高,风扇狂转
Nuikta生成的文件夹, PyInstaller可以生成一个可执行文件
Nuikta生成的文件是PyInstaller的几倍(24M:5M)
上面代码额外提到了,
file:一款判断文件类型对工具,非常强大,Mac和Linux自带,Windows下我编译了,有兴趣对可以留言问我要。
head, 这是一个非常常见的Linux命令,提取文件的前几行,和它对应的还有一个非常常见的tail,以及more等。Windows下可以使用busybox的Windows版本
wc(不是厕所),查看文件行数,不过现在有了小q,你也可以直接用小q来查询了(select count(*) from iris.csv), 这个也在busybox里可以找到
另外,如果你真的打算对某个csv做各种查询,我建议你使用DB Browser for SQLite(https://sqlitebrowser.org/)或者别的更合适数据库(PostgreSQL,Apache Drill等)。
再做个小预告,基于PyInstaller编译的 autocrud编译成功,你提供sqlite,我提供autocrud,你的免费管理系统就可以用起来了,敬请期待。
如果有什么建议和意见,也欢迎留言,或者加我个人微信,
麻烦点亮[在看],🙏🙏🙏!