打包分发Python程序

运行 Python 程序,需要部署 Python 执行环境并安装依赖包,操作繁琐。

借助 PyInstaller 等工具,可以将 Python 程序和 Python 环境一起打包成可执行程序,极大改善部署体验。本文以一个简单的实验程序,演示打包方法。

实验程序

我们编写一个程序,并用它演示如何打包 Python 程序。程序通过 ntplib 查询 NTP服务器 并输出相关信息:

  1. import ntplib
  2.  
  3. from datetime import (
  4. datetime,
  5. )
  6.  
  7. def format_ts(ts):
  8. return datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
  9.  
  10. def check_time():
  11. client = ntplib.NTPClient()
  12. rsps = client.request('asia.pool.ntp.org', version=3)
  13.  
  14. print('Server:', ntplib.ref_id_to_text(rsps.ref_id))
  15. print('Offset:', rsps.offset)
  16. print('Time:', format_ts(rsps.tx_time))
  17.  
  18. if __name__ == '__main__':
  19. check_time()

先使用 virtualenv 初始化一个 Python 隔离环境进行实验:

  1. $ virtualenv env

验证 Python 隔离环境功能是否正常:

  1. $ env/bin/python --version
  2. Python 3.7.1

接着执行 pip 工具安装依赖包:

  1. $ env/bin/pip install ntplib==0.3.3

可以通过 python 命令执行程序了:

  1. $ env/bin/python checktime.py
  2. Server: 119.160.254.155
  3. Offset: 0.004868745803833008
  4. Time: 2019-02-01 19:34:17

PyInstaller

../_images/3b69fba0e9d9577ba7b7f2746a61516b.png

PyInstaller 工具用于将 Python 应用及其依赖打包成一个 单文件程序 。支持系统包括:

使用之前,需进行安装:

  1. $ env/bin/pip install pyinstaller==3.4

执行 pyinstaller 命令, checktime.py 是待打包脚本, -F 表示打包成单文件程序:

  1. $ env/bin/pyinstaller -F checktime.py

如无意外,在 dist 目录下可以找到打包后的程序。可以直接执行:

  1. $ dist/checktime
  2. Server: 42.204.179.159
  3. Offset: -0.024485349655151367
  4. Time: 2019-02-01 10:51:08

将以上程序拷贝到其他同类型系统上,也可以 直接执行 。这样一来,其他系统无需安装 Python 环境,也无需安装依赖库即可执行 Python 应用,非常便捷!

下一步

订阅更新,获取更多学习资料,请关注我们的 微信公众号

../_images/wechat-mp-qrcode.png小菜学编程

微信打赏