树莓派(Raspbian系统)中使用pyinstaller封装Python代码为可执行程序

一、前言 

  将做好的Python软件运行在树莓派上时,不想公开源码,就需要对文件进行封装(或称打包),本文主要介绍使用pyinstaller封装Python代码为可执行程序。

  Python是一个脚本语言,被解释器解释执行。它的发布方式:(来自文章david++

  • .py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Python并且安装依赖的各种库。(Python官方的各种安装包就是这样做的)

  • .pyc文件:有些公司或个人因为机密或者各种原因,不愿意源码被运行者看到,可以使用pyc文件发布,pyc文件是Python解释器可以识别的二进制码,故发布后也是跨平台的,需要使用者安装相应版本的Python和依赖库。在树莓派上运行.py文件时,有时会自动生成.pyc的文件,并且该文件如果作为模块,可被其他文件正常引用。

  • 可执行文件:对于非码农用户或者一些小白用户,你让他装个Python同时还要折腾一堆依赖库,那简直是个灾难。对于此类用户,最简单的方式就是提供一个可执行文件,只需要把用法告诉Ta即可。比较麻烦的是需要针对不同平台需要打包不同的可执行文件(Windows,Linux,Mac,...)。

  本文主要介绍第三种方式,之前在运行.py或.pyc文件时,需要在命令行中输入:python filename.py,通过对.py文件封装(不能封装.pyc文件),直接用鼠标双击生成的文件,可直接运行代码。

  各种打包工具的对比如下:

SolutionWindowsLinuxOS XPython 3LicenseOne-file modeZipfile importEggspkg_resources support
bbFreeze yes yes yes no MIT no yes yes yes
py2exe yes no no yes MIT yes yes no no
pyInstaller yes yes yes no GPL yes no yes no
cx_Freeze yes yes yes yes PSF no yes yes no

  树莓派的官方推荐系统为Raspbian(基于Debian系统),本文采用pyinstaller工具

二、安装pyinstaller

  方式一:直接使用pip安装(强烈不推荐,可以安装成功,但是不能直接运行):

$pip install pyinstaller

  方式二:

  1.官方下载源码(点击链接即可下载,支持Python版本 2.7, 3.4–3.7):https://github.com/pyinstaller/pyinstaller/tarball/develop

  2.打开终端,cd到下载的压缩包(例如我直接下到桌面上),解压文件:

$cd Desktop
$tar -zxvf PyInstaller-3.4

  浏览了无数博客,大多到了这一步,就直接开始打包.py文件,但是在树莓派上会不断报错(报错内容不记得了,但是生成的两个文件夹中的dist内没有文件),经过痛苦的找答案过程,终于在官方文档中找到了答案(文档链接):

$cd bootloader
$python ./waf distclean all

  3.打包文件:

  我是用来打包web项目的启动文件(项目目录:/home/pi/Desktop/myproject,启动文件为:web_server.py):

$python /home/pi/Desktop/PyInstaller-3.4/pyinstaller.py -F /home/pi/Desktop/myproject/web_server.py

  在项目目录中生成两个文件夹及一个web_server.spec文件,其中在dist文件夹中有一个可执行文件。

  将此文件复制到上级目录(也就是跟web_server,py的同级目录下),双击执行即可。

 (如运行web的启动程序报import错误,建议采用间接方式启动,如:新建web_server01.py,代码为:

import os
os.system('python /home/pi/Desktop/myproject/web_server.pyc')

将该文件封装,运行封装后的文件,可解决此问题)

原文地址:https://www.cnblogs.com/wendaobiancheng/p/9772509.html