一、pyinstaller打包为exe
1.pyinstaller -F XXX.py
-F是打包为一个完整的exe程序
二、解决joblib.Parallel打包为exe运行报错的问题
1.利用multiprocessing.Pool替换joblib.Parallel模块
代码如下(示例):
from multiprocessing import Pool
po = Pool(3)#3是计划启动的线程个数
for i in range(10):
po.apply_async(target, (args))#target是目标函数,args是函数的参数,apply_async是各个进程分开执行,不阻塞
po.close()# 关闭进程池,关闭后po不再接受新的请求
po.join()#阻塞主进程,等到上诉进程执行完毕再继续执行
#利用上述方法需要添加multiprocessing.freeze_support()函数,且必须添加在if __name__ == "__main__":下面,如下:
if __name__ == "__main__":
multiprocessing.freeze_support()
2.利用猴子补丁修改Parallel
参考链接:https://github.com/joblib/joblib/issues/1002
代码如下:
import joblib
#每一次使用Parallel之前都先调用该函数
def change_jolib_parallel_prefer(prefer='threads'):
_original_init = joblib.parallel.Parallel.__init__
def _monkey_patched_init(self, *args, **kwargs):
kwargs['prefer'] = prefer
_original_init(self, *args, **kwargs)
joblib.parallel.Parallel.__init__ = _monkey_patched_init