问题
我的代码是用了flask和flask_apscheduler来写的文件名为web.py的代码,flask_apscheduler中设置的定时函数是用selenium爬取一个网站,没有设置成界面后台运行,而是直接展示的那种。
于是出现了问题,在用文章用pyinstaller -F 打包flask项目成exe文件时报错jinja2.exceptions.TemplateNotFound: template.html中提到的方法进行打包后,exe文件可以正常运行,但是给创建成了服务后,运行服务后是可以照常打开flask生成的页面,但是flask_apscheduler中的爬虫代码无法运行
解决
- 在cmd中cd到项目所在的文件夹里
- 运行
pyinstaller -D -p C:\***\***\anaconda3\Lib\site-packages web.py
,这里C:\***\***\anaconda3\Lib\site-packages
是项目的site-packages
位置,web.py
是需要打包的py文件 - 第2步运行好后,进入
dist
文件夹中的web
文件夹(这个名字和你要打包的py文件相同),将flask
项目的templates
和static
文件夹复制粘贴进来 - 并将
site-packages
中的flask
,flask_apscheduler
和pymysql
(如果有用到pymysql的话)完全复制粘贴进dist
文件夹中的web
文件夹 - 再将
chromedriver.exe
复制到dist
文件夹中的web
文件夹中 - 用
nssm
创建服务,在创建服务后,右键服务,点击属性,点击登录,然后勾选允许服务于桌面交互
,点击确定即可 - 右键该服务,点击
启动
即可运行该服务