我用python写了一个截图程序,想把它编译成.exe
文件。所以我尝试了py2exe
和pyinstaller
.
我的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_support
和Process
multiprocessing