Linux可执行文件制作
背景
测试过程中,需要针对不同的Linux系统、核心服务版本进行验证,各种环境依赖的python版本以及已安装的库存在较大差异,考虑到实际测试需求以及出差现场使用的要求,需要将测试脚本打包为可执行文件,可以最大程度上减少依赖,保障测试程序的可用性和易用性。本文介绍一种利用python的pyinstaller库,将程序打包为可执行文件的方式,脱离自动化工程或复杂的环境配置。后半部分针对一些固有化的实现进行介绍,希望对大家有所帮助。
环境配置
当前使用的编程语言为python3,建议在测试服务器上安装python3,将能够更好地进行兼容。
Python3环境安装问题
可参考https://wiki.hikvision.com.cn/pages/viewpage.action?pageId=49800240
Pyinstaller安装及使用
安装
(1)方式一:直接用pip安装
pip install pyinstaller
(2)方式二:源码安装
下载pyinstaller安装包后执行以下命令手动安装:
tar -zxvf PyInstaller-3.6.tar.gz
cd PyInstaller-3.6/
python3 setup.py build
python3 setup.py install
如果输入 pyinstaller 命令可以直接使用,那就可以了。
- 问题1:输入pyinstaller命令提示 command not found
解决方式:复制pyinstaller到/usr/bin/下
cd /usr/local/python3/bin/
cp pyinstaller /usr/bin/.
- 问题2:python setup.py build报错
- 解决:需要升级setuotool的版本
wget https://pypi.python.org/packages/41/80/268fda78a53c2629128f8174d2952c7f902c93ebaa2062b64f27aa101b07/setuptools-38.2.3.zip#md5=0ae64455d276ff864b40aca9c06ea7c1
unzip setuptools-38.2.3.zip
cd setuptools-38.2.3
python setup.py install
- 问题3:包依赖关系处理
在linux下安装rpm包的时候发现,安装一个服务需要安装很多rpm包,比如安装apache,最少需要安装3-4个包,当然主包只有一个,其中还有好多依赖关系,甚至会出现循环依赖的“死锁”。为了避免包之间的依赖关系问题,可以采取同时安装所有有关rpm包的方式:
rpm -ivh xx1.rpm xx2.rpm xx3.rpm
使用
Pyinstaller使用方法:
rpm -ivh xx1.rpm xx2.rpm xx3.rpm
- 打包成功后有缺失包
安装时,wheel库通过python setup.py build & python setup.py install 安装失败。需要先将wheel文件下载到本地,然后pip install ...wheel。
资源链接:各种python wheel文件
- 包缺失
问题:python用pyinstaller打包时,打包的py文件中有import paramiko,打好包后的文件执行时提示,No module named paramiko。
解决:添加一个-p的参数。如:
pyinstaller -F xx.py -p paramiko
- Hidden-import