项目目录结构:
打包时结构:
首先安装Pyinstaller和Cython.
第一步,将py文件编译为pyd
在app目录下新建setup.py,内容如下:
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize(["get_data.py",
"common.py",
"api.py",
"ae_algorithm.py",
"models.py",
"importData.py"]
))
在app目录下打开 dos窗口,执行python setup.py build_ext --inplace,生成build和app目录,在app/app目录下生成pyd文件,删除app目录下的c文件和py文件(保留__init__的),将app/app下的pyd文件复制到
app下。
第二步,打包成exe
在core下执行 pyinstaller -F manage.py,其中manage为工程入口(类比于springboot的启动类),会生成dist目录,dist目录下有manage.exe,完成。
第三步,相关报错及另一种打包方式
①:执行完第二步,会产生manage.spec文件,如果manage.exe在启动时报ModuleNotFoundError: No module named ‘xxx’,将xxx加入到manage.spec的hiddenimports=[‘xxxx’,‘yyy’’]中,(或打包命令增加pyinstaller -F manage.py --hidden-import xxx),执行Pyinstaller manage.spec。
②:
app/app和app/build可备份后删除。
Ⅰ–执行pyinstaller manage.spec,在dist下会生成manage目录。附属文件如jar包、requirements.txt文件也加到manage下。如果manage/app下pyd文件缺失,则将第一步获得的文件加入到该目录,然后执行manage下的manage.exe,如果库缺失,则将\Python\Lib\site-packages下对应的库复制到manage下,执行manage.exe直到正确启动。
Ⅱ–封包,使用nigma Virtual Box,将主进程设置为manage.exe,将mange下其他文件设置为文件树。PS:该种方式打包比较大,大概是第二步的2倍大小。