python打包py文件生成exe,以及运行exe产生的问题

系统 1764 0

python打包py文件生成exe,以及运行exe产生的问题

1 安装pyinstaller

pip install pyinstaller

我这里已经安装过了,就不再多说啦!
python打包py文件生成exe,以及运行exe产生的问题_第1张图片

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程序出现的问题

运行之后 我发现计算机不怎么响应了,而且很卡,打开任务管理器:

python打包py文件生成exe,以及运行exe产生的问题_第2张图片
一会电脑就马上挂掉啦!这并不是我们想要的结果

接着在网上一番百度,终于找到解决问题的办法:
pyinstaller版本小于3.3的windows附加代码(不过我的版本是3.4的不知道为什么还会出现这个问题,反正添加上后程序运行就正常啦)

新建一个wenke.py文件 添加如下代码:

            
              import os
import sys
import 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 forking
except ImportError:
    import multiprocessing.forking as forking

if 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! 大功告成


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论