查看原文
其他

如何让你的Python应用程序分发变得很容易?

alitrack alitrack 2022-10-01


开始今天的话题前,我想先讲一个我很早之前做的尝试。无意间发现一份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(MacOSWindows),它可以把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,你的免费管理系统就可以用起来了,敬请期待。


如果有什么建议和意见,也欢迎留言,或者加我个人微信,



麻烦点亮[看],🙏🙏🙏




Search Results

Web Result with Site Links




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存