我使用 pyinstaller 为一个朋友的个人项目的 Bottle_app 创建了一个可执行文件。但是,运行可执行文件后,无法加载主页模板。
服务器的控制台仅在几次刷新后显示以下内容:
Bottle v0.12.19 server starting up (using WSGIRefServer())...
Listening on http://localhost:8080/
Hit Ctrl-C to quit
127.0.0.1 - - [02/Apr/2021 08:01:30] "GET / HTTP/1.1" 500 788
127.0.0.1 - - [02/Apr/2021 08:01:30] "GET /favicon.ico HTTP/1.1" 404 742
127.0.0.1 - - [02/Apr/2021 08:01:35] "GET / HTTP/1.1" 500 788
127.0.0.1 - - [02/Apr/2021 08:01:36] "GET / HTTP/1.1" 500 788
当我在我的机器上正常运行 Bottle_app.py 文件时,它工作正常。
这是我在 pyinstaller 中运行的命令
pyinstaller --onefile --add-data 'views/*;views' --add-data 'views/css;views/css' --add-data 'views/js;views/js'--add-data 'pricesBeef.csv;.' --add-data 'pricesHog.csv;.' --add-data 'pricesLamb.csv;.' 'bottle_app.py'
这是我的应用程序的结构
bottle_app.py
价格牛肉.csv
价格Lamb.csv
价格Hog.csv
视图(文件夹)
->7 个 html 文件(内部视图)
->css(视图内的文件夹)
->->css 文件(仅在 css 文件夹内)
->js(视图内的文件夹)
->->js 文件(仅限 js 文件夹内的文件)
我没有收到任何回溯错误,这对我来说是奇怪的部分。
不是直接答案,而是解决方法
使用
--onedir
而不是 --onefile
,只需使用可执行文件的快捷方式即可。即使目录中有 .pdy 文件,它也可以在不需要安装 python 的情况下工作
有一个对我和其他人都有效的解决方法:
import os
import sys
f = open(os.devnull, 'w')
sys.stdout = f
sys.stderr = f
import eel
它的基本作用是将 sys.stderr 和 sys.stdout 重定向到 /dev/null。
我想归功于我找到它的线程:https://github.com/python-eel/Eel/issues/654