我是使用node_vm2库执行Js文件,开始是用execjs的,但是发现执行某些运算,execjs与node和浏览器执行结果不一致,execjs还是存在一些问题,所以使用node_vm2,但是使用pyinstaller打包含node_vm2库,(包含pyqt5),运行时报错:Error: Cannot find module xxx _MEI399162\node_vm2\vm-server
node:internal/modules/cjs/loader:936
throw err;
^
Error: Cannot find module 'C:\Users\29571\AppData\Local\Temp\_MEI399162\node_vm2\vm-server'
[90m at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)[39m
[90m at Function.Module._load (node:internal/modules/cjs/loader:778:27)[39m
[90m at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)[39m
[90m at node:internal/main/run_main_module:17:47[39m {
code: [32m'MODULE_NOT_FOUND'[39m,
requireStack: []
提示找不到node_vm2\vm-server,试了各种办法,比如将node_vm2文件夹复制到exe同目录,仍然报错,下面记录一下主要的历程
主要思路:找到node_vm2安装包,在Lib\site-packages文件夹下,将文件夹加入打包参数
1、使用--add-data加参数,命令如下:pyinstaller -D -w --add-data="D:\PROGRAM\Anaconda3\Lib\site-packages\node_vm2\vm-server;./" run.py (vm-server后面带分号;和点杠./)
运行文件时,发现C:\Users\29571\AppData\Local\Temp\_MEI399162\文件夹下没有node_vm2这个文件夹,而vm-server下的文件被打包进来了(这个文件夹是个临时文件夹,要程序运行时才找得到,程序关闭后,它就消失了),运行程序仍然报找不到node_vm2\vm-server这个错
2、尝试改命令如下:pyinstaller -D -w --add-data="D:\PROGRAM\Anaconda3\Lib\site-packages\node_vm2;./" run.py
运行文件时,发现C:\Users\29571\AppData\Local\Temp\_MEI399162\文件夹下有了vm-server,但是没有node-vm2,仍然报这个错
3、新建一个文件夹,将node_vm2文件夹复制到新建文件夹,改命令如下:pyinstaller -D -w --add-data="C:\Users\29571\Desktop\新建文件夹;./" run.py
如此以来,node_vm2这个文件夹被整个打包进去了,程序正常运行