我使用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
,我只需使用pip install pyinstaller
进行安装即可。已安装的版本 - > 3.3.1
。请注意,我在虚拟环境中安装此软件包。
我通过运行pyinstaller --onefile screenshot.py
来编译程序。它生成了一个可执行文件screenshot.exe
。当我运行可执行文件时,没有截屏。
对于安装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
无效。我错过了什么吗?
感谢您的帮助。
答案 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
Process
和multiprocessing