树莓派(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文件),直接用鼠标双击生成的文件,可直接运行代码。
各种打包工具的对比如下:
| Solution | Windows | Linux | OS X | Python 3 | License | One-file mode | Zipfile import | Eggs | pkg_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')
将该文件封装,运行封装后的文件,可解决此问题)
树莓派(Raspbian系统)中使用pyinstaller封装Python代码为可执行程序的更多相关文章
- [IOT] - 在树莓派的 Raspbian 系统中安装 .Net Core 3.0 运行环境
之前在 Docker 中配置过 .Net Core 运行环境,地址:[IOT] - Raspberry Pi 4 Model B 系统初始化,Docker CE + .Net Core 开发环境配置 ...
- 树莓派Raspbian系统密码
树莓派Raspbian系统密码 树莓派Raspbian系统默认登录用户名为pi,该账户默认密码是raspberry(可在raspi-config中修改). 树莓派的Raspbian系统root用户默认 ...
- android系统中对ffmpeg封装最好的免费SDK
android系统中对ffmpeg封装最好的免费SDK; 无论个人还是公司,都免费商用, 欢迎下载. https://github.com/LanSoSdk/LanSoEditor_common 可能 ...
- vim中凝视多行python代码
在vim中凝视多行python代码比較麻烦,主要由下面几种方法: (1)将须要凝视的代码以文档字符串的形式呈现 (2)将须要凝视的代码以函数的形式呈现 (3)使用vim自身快捷键 我们主要使用第三种方 ...
- frp内网渗透实现ssh外网访问家里树莓派(树莓派raspbian系统+腾讯云contos7)
只有信用卡大小的它,同时也是一台功能完备的电脑(树莓派),把内网能玩的功能都玩了个遍,自然就有了外网访问这台树莓派的需求.一样也是查阅了无数文章,研究了无数个方案,最终试验成功用FRP实现了内网穿透, ...
- Github 大牛封装 Python 代码,实现自动发送邮件只需三行代码
*注意:全文代码可左右滑动观看 在运维开发中,使用 Python 发送邮件是一个非常常见的应用场景.今天一起来探讨一下,GitHub 的大牛门是如何使用 Python 封装发送邮件代码的. 一般发邮件 ...
- win7下用PyInstaller把Python代码打包成exe文件
2013-11-05 22:02:14| 1.安装 使用PyInstaller需要安装PyWin32. 下载与Python对应的PyInstaller版本,解压后就算安装好了. 例如,安装了PyI ...
- 利用PyInstaller将python代码封装成EXE(亲测可用)
有些不能成功,有些不全的,下面总结一下,给自己以后看看. 1下载PyInstaller..去官网下载http://www.pyinstaller.org/(我下载的版本) 2不需要安装,解压即 ...
- 推荐几个树莓派 raspbian 系统 可用的 arm docker源
树莓派刚到手各种尝鲜,试过不少系统,最后还是回归了raspbian os 系统 root@raspberrypi:/home/pi# cat /proc/version Linux version 4 ...
随机推荐
- centOS7安装Composer
1.进入Composer国内镜像网站文档页查看安装方法: https://docs.phpcomposer.com/00-intro.html 2.在centOS系统中进入特定目录执行以下命令: cd ...
- Navicat Premium连接各种数据库
版本信息 Navicat Premium 是一套数据库开发工具,让你从单一应用程序中同时连接 MySQL.MariaDB.SQL Server.Oracle.PostgreSQL 和 SQLite 数 ...
- A - 低阶入门膜法 - K-th Number (主席树查询区间第k小)
题目链接:https://cn.vjudge.net/contest/284294#problem/A 题目大意:主席树查询区间第k小. 具体思路:主席树入门. AC代码: #include<i ...
- C 语言 register 关键字
register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率.注意是尽可能,不是绝对.你想想,一个CPU 的寄存器也就那么几个或几十个,你要是定义了很 ...
- EB-GAN系(Energy-based GAN)
学习总结于国立台湾大学 :李宏毅老师 EB-GAN: Energy-based Generative Adversarial Network MA-GAN:MAGAN: Margin Adaptati ...
- git命令行工作环境配置【转】
转自:http://www.cocoachina.com/ios/20171115/21163.html 本文为CocoaChina网友whf5566投稿 前言 笔者一直使用git的图形化工具sour ...
- Linux系统调用的运行过程【转】
本文转自:http://blog.csdn.net/kernel_learner/article/details/7331505 在Linux中,系统调用是用户空间访问内核的唯一手段,它们是内核唯一的 ...
- Python3学习笔记13-函数的参数
定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数, 以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了 ...
- SpringMVC_HelloWorld_02
一.新建项目 同SpringMVC_HelloWorld_01 二.配置文件 1.配置web.xml <?xml version="1.0" encoding="U ...
- jumperserver3.0的安装部署
适用于jumperserver版本:v0.3.1-2 官网:http://www.jumpserver.org/ 系统:centos7.2 基本安装 备注:如果是centos系统最好使用基本安装,否 ...