由 py2exe 和 pyinstaller 生成的 exe 不起作用



我用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计算机上安装它存在一些问题,因此我按照此链接中的教程进行操作

我创建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不起作用。我错过了什么吗?

谢谢你的帮助。

解决了!

以下是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_supportProcessmultiprocessing

最新更新