pyinstaller打包运行报错(--windowed)

报错内容

因为当使用PyInstaller 的 --windowed打包后就没有输出框使用了,代码中“sys.stdout” 也就变成了None导致uvicorn中有一行代码sys.stdout.isatty()报错。解决方案也非常简单,不会影响以前写的代码(在下面)。
在这里插入图片描述

Traceback (most recent call last):
  File "logging\config.py", line 542, in configure
  File "logging\config.py", line 654, in configure_formatter
  File "logging\config.py", line 473, in configure_custom
  File "uvicorn\logging.py", line 42, in __init__
AttributeError: 'NoneType' object has no attribute 'isatty'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "main.py", line 11, in <module>
  File "uvicorn\main.py", line 522, in run
  File "uvicorn\config.py", line 285, in __init__
  File "uvicorn\config.py", line 393, in configure_logging
  File "logging\config.py", line 808, in dictConfig
  File "logging\config.py", line 545, in configure
ValueError: Unable to configure formatter 'default'
Traceback (most recent call last):
  File "main.py", line 3, in <module>
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 391, in exec_module
  File "app.py", line 6, in <module>
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 391, in exec_module
  File "apis.py", line 8, in <module>
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 391, in exec_module
  File "modules\app\wen_search\apis\__init__.py", line 10, in <module>
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 391, in exec_module
  File "modules\app\wen_search\apis\file_api.py", line 10, in <module>
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 391, in exec_module
  File "libs\utils\logger.py", line 27, in <module>
  File "libs\utils\logger.py", line 13, in __init__
  File "loguru\_logger.py", line 865, in add
TypeError: Cannot log to objects of type 'NoneType'

解决方案

判断如果sys.stdout为空时,重新定义一个sys.stdout示例即可。

1、创建一个py文件

import sys

if not sys.stdout:
    class FakeStdOut:
        def __init__(self, filename="sys.log"):
            self.log = open(filename, "a")

        def write(self, message):
        	# 我这里把原本打印到控制台的内容,写到了sys.log文件中,也可以不写直接pass
            self.log.write(message)

        def flush(self):
            pass

        def isatty(self):
            return True

    sys.stdout = FakeStdOut()

2、直接在项目入口文件中引入如上py即可

我上面创建的文件叫sys_redirect ,在入口直接引入就可以了。
import libs.utils.sys_redirect

import uvicorn
from libs.utils.file import get_config
import libs.utils.sys_redirect # 在这里引入上边的py文件即可
import app # 引入后打包自动引入 , 不引入打包时找不到app.py。


if __name__ == "__main__":
    config = get_config()
    uvicorn.run(app="app:app", host="0.0.0.0", port=config.port, reload=False)

3、点个赞❤❤❤

有什么问题可以发到评论区一起交流。

  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值