python打包py文件生成exe,以及运行exe产生的问题
1 安装pyinstaller
pip install pyinstaller
我这里已经安装过+usdt跑分app开发找吴燕了(T:I56、2227、7887V)就不再多说啦!
2 用pyinstaller进行打包
(1)选项:
-F:表示生成单一的exe文件
-w:表示执行exe文件时去除背后的dos窗口 ps:建议最初试验时保留dos,可以查看是否有错误发生
-p:有些需要手动添加包的位置(dir1,dir2)多个地址时以分号分开
-i:加入图标
(2)打包一个py文件 添加图标(格式为ico的图片):
pyinstaller -F XXX.py -i XX.ico
(3)打包多个py文件:
pyinstaller -F XXX.py -p XX.py -i XX.ico(以此类推)
运行以后,会生成dist和build两个文件夹,exe在dist文件夹下。如果程序需要用到附加的文件则添加到dist文件夹中即可。
3 运行打包后的 多进程exe程序出现的问题
运行之后 我发现计算机不怎么响应了,而且很卡,打开任务管理器:
一会电脑就马上挂掉啦!这并不是我们想要的结果
接着在网上一番百度,终于找到解决问题的办法:
pyinstaller版本小于3.3的windows附加代码(不过我的版本是3.4的不知道为什么还会出现这个问题,反正添加上后程序运行就正常啦)
新建一个wenke.py文件 添加如下代码:
import osimport sysimport multiprocessing# Module multiprocessing is organized differently in Python 3.4+try: # Python 3.4+ if sys.platform.startswith('win'): import multiprocessing.popen_spawn_win32 as forking else: import multiprocessing.popen_fork as forkingexcept ImportError: import multiprocessing.forking as forkingif sys.platform.startswith('win'): # First define a modified version of Popen. class _Popen(forking.Popen): def __init__(self, *args, **kw): if hasattr(sys, 'frozen'): # We have to set original _MEIPASS2 value from sys._MEIPASS # to get --onefile mode working. os.putenv('_MEIPASS2', sys._MEIPASS) try: super(_Popen, self).__init__(*args, **kw) finally: if hasattr(sys, 'frozen'): # On some platforms (e.g. AIX) 'os.unsetenv()' is not # available. In those cases we cannot delete the variable # but only set it to the empty string. The bootloader # can handle this case. if hasattr(os, 'unsetenv'): os.unsetenv('_MEIPASS2') else: os.putenv('_MEIPASS2', '') # Second override 'Popen' class with our modified version. forking.Popen = _Popen
然后在mul_process.py中加入:
import wenke
然后在if name == '__main__':下面加入:
multiprocessing.freeze_support()
添加完后,再次进行打包,运行程序 ok! 大功告成