pyinstaller简介

通过pyinstaller可以将我们的python项目打包为可执行的exe文件,有两种打包方式,一种是打包为单个文件,即在编译时使用参数**-F**,另一种是打包为一个文件夹,即在编译时使用**-D**,而**-w**参数可以让exe在运行时不打开命令行(默认是打开的状态)。

# 带命令行的打包单个文件命令
pyinstaller -F IPC_LOG_TOOL.py

# 带命令行的文件夹命令
pyinstaller -D IPC_LOG_TOOL.py

# 不带命令行的单个文件
pyinstaller -w -F IPC_LOG_TOOL.py

# 不带命令行的文件夹命令
pyinstaller -w -D IPC_LOG_TOOL.py

pyinstaller使用-windows

上面所示的是通用版本,但是不是太灵活,想加入新的资源文件,或者每次编译时都需要输入很长的命令,

接下来说明下怎么使用spec文件,进行配置编译。

step1

首先使用通用方法做第一次编译,即用上面的方式进行编译,这时会生成一个与编译目的py文件同名但后缀为spec的文件。
请添加图片描述

打开spec文件如下所示(这已经是配置好的文件):

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['IPC_LOG_TOOL.py'],
             pathex=['E:\\AE_TOOLS'],
             binaries=[],
             datas=[('pyinstallerInitFile\\powerFile', '.')],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='IPC_LOG_TOOL',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=False,
		  icon='E:\\AE_TOOLS\\pyinstallerInitFile\\tuya.ico')
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='IPC_LOG_TOOL')

这里仅对涉及到的几个关键变量进行解释

Analysis

第六行[‘IPC_LOG_TOOL.py’]是所有的编译目标py文件以及全部依赖文件,如果依赖文件都在同一目录下则可以不写。

pathex:项目的绝对路径

datas:添加资源文件,例如文件夹、图片、excel等等,以元组入参,第一个参数为原始路径,第二个参数为编译后的目标路径。

EXE

console:是否开启命令行,默认为true(开启)

icon:编译出exe可执行文件产物的图标。必须用绝对路径

name:EXE内和COLLECT内的name指的都是编译后的文件名,默认与编译文件同名。

step2

利用配置好的编译文件spec进行编译

pyinstaller  IPC_LOG_TOOL.spec

什么参数都不需要带,所有的配置已经在spec文件内定义好了

快捷编译-windows

在同级目录下的bat脚本编译.bat可以快速的进行编译,在编译前删除上一次生成的编译产物dist目录,编译后删除这次编译生成的build目录,双击运行即可
请添加图片描述

pyinstaller使用-linux

由于pyinstaller本身就是支持跨平台的,所以上面说的所有都是同时适用于linux和mac端,仅仅有一些不同,但是要注意配置文件spec中的路径要记得切换。

与windows平台差异

在windows平台下的cmd命令行内使用如下命令就可以直接安装:

pip install pyinstaller

然后直接使用上面提到的pyinstaller编译命令或者依赖配置文件唤起编译就可以实现实现python文件的exe可执行文件打包。

在linux和mac平台下是行不通的。

可以安装pyinstaller,但是仅是作为python的一个库存在,但是是无法实现程序的编译打包的,这是因为通过源码安装的python,默认是无法使用共享库的,也就是说python的一些重要文件是无法被包含的,可能涉及到一些第三方库,以及python每部文件,感兴趣可以百度查找下相关的文件。

暂时不知道linux原生态的python是否存在这个问题,感兴趣的可以尝试下。

本次仅说明通过源安装的高版本python的pyinstaller打包问题。

Ubuntu18.04 LTS 升级Python3.8

1、下载源码

wget https://www.python.org/ftp/python/3.8.6/Python-3.8.6.tgz

2、解压源码并进入目录

tar -zxvf Python-3.8.6.tgz
cd Python-3.8.6

3、配置

此处给出的常见配置,想使用pyinstaller需要加额外的限制,下面会有说明。

./configure --with-ssl --prefix=/usr/local/python3

4、更新系统依赖

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus libncursesw5-dev libgdbm-dev libc6-dev zlib1g-dev libsqlite3-dev tk-dev libssl-dev openssl libffi-dev

5、编译

这里同时使用4个核心进行编译,即-j 4,可以根据自己情况进行修改数值,或取消这个参数。

sudo make -j 4

6、安装

sudo make install

7、设置为默认python环境

1、删除原来的软链接
sudo rm -rf /usr/bin/python3sudo rm -rf /usr/bin/pip3
2、新建软链接
sudo ln -s /usr/local/python3/bin/python3.8 /usr/bin/python3sudo ln -s /usr/local/python3/bin/pip3.8 /usr/bin/pip3

至此,Python3.8升级完成,在命令行输入Python3,出现下述界面,说明升级成功:

Python 3.8.6 (default, Jul 28 2020, 12:59:40) [GCC 9.3.0] on linuxType "help", "copyright", "credits" or "license" for more information.>>> 

温馨提示还可以将python和pip的软链接搞掉,也链接到python3.8上哦。

linux下python使用pyinstaller

如果之前并未升级过python,那么要将上面升级的步骤全进行一遍,但是配置环境步骤使用的命令要进行扩充,使用下面的命令:

sudo ./configure --with-ssl --prefix=/usr/local/python3 --enable-shared --enable-optimizations

如果之前升级过,找到源码包重新配置、编译、安装就可以,如果安装包被删除了,下载个新的直接配置、编译、安装就ok。

但是在第一次运行时可能会报错:

./python3.8: error while loading shared libraries: libpython3.8.so.1.0: cannot open shared object file: No such file or directory

此时要使用下面的命令:

find / -name libpython3.8.so.1.0

请添加图片描述
此处不使用sudo也是可以的,因为这个文件权限不高,

使用下面的命令:

cp /usr/local/python3/lib/libpython3.8.so.1.0 /usr/lib/

或者:

cp /usr/local/python3/lib/libpython3.8.so.1.0 /usr/lib64/

然后就可以按照pyinstaller正常使用的流程进行使用了。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐