Pyinstaller打包多进程的问题

Zss 发表于:

正常情况下使用到多进程时在p’y’charm中运行时一切都Ok,很早之前写的多进程的爬虫,当我使用Pyinstaller打包成exe后,

每次程序都会发生错误,能运行,但是总是出错,也就一直没有去追究这个问题了,偶然间网上发现了解决的办法,于是重新实验下,

发现可以正常运行,这也就意味着我下次写小工具的时候可以只用多进程来完成了,再打包成exe

github上的解决办法:https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing

1.Pyinstller版本应该在这个之间:3.0 < 3.3

2.创建一个mu.py文件,写入以下代码

import os
import sys

try:

    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'):

    class _Popen(forking.Popen):
        def __init__(self, *args, **kw):
            if hasattr(sys, 'frozen'):
                os.putenv('_MEIPASS2', sys._MEIPASS)
            try:
                super(_Popen, self).__init__(*args, **kw)
            finally:
                if hasattr(sys, 'frozen'):
                    if hasattr(os, 'unsetenv'):
                        os.unsetenv('_MEIPASS2')
                    else:
                        os.putenv('_MEIPASS2', '')

    forking.Popen = _Popen

3.在主程序中导入此模块

import mu

4.在主程序中导入,在if __name__ == ‘__main__’:  后面加入  multiprocessing.freeze_support()

if __name__ == '__main__':
    multiprocessing.freeze_support()