在win7环境 或者 ubt14.04环境,配合python3.7.X和pyinstaller3.6对一些代码进行打包,以aiohttp的web项目为例子:
创建存放二进制文件的路基:D:\program\mywork\pyworkspace\sa2_bin 然后命令行进入。
对需要打包的工程main文件进行打包:pyinstaller -F D:\program\mywork\pyworkspace\sa2\AioRpcServer.py
注意:main文件必须要有main入口:if __name__ == '__main__':
打包完成后会生成build文件夹、dist文件夹、AioRpcServer.spec描述文件:
若是aiohttp的web工程,则可以将原工程中与AioRpcServer.py同级的静态文件拷贝到dist下与AioRpcServer.exe同级,例子:
用命令行 执行 AioRpcServer.exe
1.若报错ModuleNotFoundError,则在对应的文件头import缺失的模块后重新编译:
2.若报错FileNotFoundError:No such file or directory,则编写对应的hook钩子文件后重新编译:
如下图所例,缺少jsonrpcserver包下的文件,则在hooks路径下(win7是C:\Program Files\Python37\Lib\site-packages\PyInstaller\hooks ubuntu14.04是/usr/local/python3/lib/python3.7/site-packages/PyInstaller/hooks)新建hoolk-<模块名>.py,这里是hook-jsonrpcserver.py,并添加内容:
# -*- coding: UTF-8 -*-
from PyInstaller.utils.hooks import collect_data_files
datas = collect_data_files("jsonrpcserver")
3.若报错no module named 'pkg_resources.py2_warn':
则要降低setuptools版本:pip uninstaller setuptools ;pip installer setuptools==44.0.0
4.若报错 如下则是 PBR的问题:
则要在使用到python-glanceclient的py文件头加上:
import os
os.environ['PBR_VERSION'] ='3.0.1'