py2exe和pyinstaller生成的exe无法正常工作

时间:2018-03-16 17:49:20

标签: python pyinstaller py2exe

我使用python编写了一个截图程序,并希望将其编译为.exe文件。所以我尝试了py2exepyinstaller

我的python版本是2.7.14,32位。我使用Windows 10.我也在这个项目中使用虚拟环境。

我的截图程序代码如下所示。我通过python screenshot.py运行它,它会截取我的屏幕截图并将其存储在保存目录中。

from PIL import Image
import pyscreenshot as ImageGrab
import time


time.sleep(3)


save_dir = "C:/Users/ling/Downloads/test/"

def grab():
    im = ImageGrab.grab()
    im.save(save_dir + "screenshot.png")


if __name__ == "__main__":
    grab()

pyinstaller

pyinstaller,我只需使用pip install pyinstaller进行安装即可。已安装的版本 - > 3.3.1。请注意,我在虚拟环境中安装此软件包。

我通过运行pyinstaller --onefile screenshot.py来编译程序。它生成了一个可执行文件screenshot.exe。当我运行可执行文件时,没有截屏。

py2exe

对于安装py2exe,由于在运行python 2的Windows计算机上安装它有一些问题,我按照此link

的教程进行了操作

我创建setup.py以将screenshot.py编译为screenshot.exe。以下是setup.py

的代码
from distutils.core import setup
import py2exe

setup(
      console=[{'script':'screenshot.py'}],
      options = {
            'py2exe': {
                'includes': ['PIL','pyscreenshot','time'],
                'bundle_files': 1, 'compressed': True
             }
      },
      zipfile = None
)

我使用python setup.py py2exe运行它。它生成了一个可执行文件。运行此文件时,结果与pyinstaller相同。没有截图。

我需要帮助解释为什么screenshot.exe无效。我错过了什么吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

解决了!

以下是screenshot.py的修改代码。通过py2exe运行。

from multiprocessing import Process, freeze_support
from PIL import Image
import pyscreenshot as ImageGrab
import time

time.sleep(3)


save_dir = "C:/Users/ling/Downloads/test/"

def grab():
    im = ImageGrab.grab()
    im.save(save_dir + "screenshot.png")

if __name__ == "__main__":
    freeze_support()
    p = Process(target=grab)
    p.start()

事实证明,我需要在freeze_support

中加入Processmultiprocessing