pyinstaller说明(windows、mac、linux)
pyinstaller简介通过pyinstaller可以将我们的python项目打包为可执行的exe文件,有两种打包方式,一种是打包为单个文件,即在编译时使用参数**-F**,另一种是打包为一个文件夹,即在编译时使用**-D**,而**-w**参数可以让exe在运行时不打开命令行(默认是打开的状态)。# 带命令行的打包单个文件命令pyinstaller -F IPC_LOG_TOOL.py# 带命
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正常使用的流程进行使用了。
更多推荐
所有评论(0)