PyInstaller打包Netgen/NGSolve

Netgen/NGSolve是做有限元剖分的开源包,最近有个项目需要同时对多个三维物体进行有限元剖分,Netgen自带的GUI运行程序无法满足这种灵活运用需求,运行速度被拖累,遂转向其python版本NGS-Py

官方网页上显示在python下面的安装方式支持Anaconda

conda config --add channels conda-forge
conda config --add channels ngsolve
conda install ngsolve

开发环境为 win10,Anaconda3,python 3.7

脚本很简单

import sys
import ngsolve

from ngsolve import ngsglobals
from netgen import stl as NetGenStl

# turn off output information
ngsglobals.msg_level = 0

def pyMesh(stlfile):  # , optfile):
    filename = "%s.stl" % stlfile
    geo1 = NetGenStl.STLGeometry(filename)  # "test.stl")
    m1 = geo1.GenerateMesh(maxh=4)
    m1.Refine()
    filename = "%s.vol" % stlfile
    m1.Save(filename)
    filename = "%s.txt" % stlfile
    m1.Export(filename, 'Neutral Format')

pyMesh(sys.argv[1])

脚本是对stl文件中轮廓所定义的三维物体进行剖分,脚本运行ok

打包时首先考虑的是py2exe,发现不支持python 3.7遂放弃

安装PyInstaller:pip install pyinstaller

打包命令:pyinstaller -F pymesh.py

同网上所有人遇到一样的问题,生成的是个200+MB的exe大程序,exe大程序启动很慢,明白是因为pyinstaller在Anaconda环境下会打包进去很多没用的package

遂转向pipenv寻求建立一个虚拟环境,安装必须的module,尽量缩小打包后的exe文件

诡吊的是:pipenv install netgen,pip list 后

显示netgen版本为0.3.0,这个命令安装的netgen包是 https://pypi.org/project/netgen/ , 是一个生成网络拓扑的工具,根本不是用来进行有限元剖分的,netgen/ngsolve在pip源里没有,不被支持

遂乖乖退出虚拟环境,老老实实在Anaconda Prompt中用 pyinstaller pymesh.py 打包脚本,生成的文件夹内一堆莫名其妙的package和dll文件

里面明显有很多不被生成的exe程序package和dll文件,经过多次测试运行exe程序,可直接将无用的package和文件移出当前目录,大大减少最终生成的exe文件及其所需要的文件。

总结:这样处理虽然笨一点,不能得到一个单一可执行程序,但是这样生成的exe文件小,内存加载快,启动运行速度和运行时间明显比200+MB的exe划算多了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值