写了一个 python 命令行脚本,在 cmd 使用 python 调用运行正常,但是用 pyinstaller 打包成 win 的可执行程序就报错了,截图如下,
看好像是 argparse 导致,百度谷歌翻了一遍没找到解决办法,V 友能帮忙看看吗。
1
tomczhen 150 天前 via Android
等老夫算一卦看看 bug 出在哪里。
|
2
orzfly 150 天前
我不写 python ,但你这看起来打包成 Windows GUI 程序了,我猜是 sys.stdout / sys.stderr 是空的了。
|
3
fields 150 天前
直接执行可以但是打包执行报错,这错误信息看不出来什么引起的,给个源码来链接,大家给你看一下
你是不是有动态导入其他库啊 |
4
lovelylain 150 天前 via Android
def _print_message(self, message, file=None):
if message: file = file or _sys.stderr try: file.write(message) except (AttributeError, OSError): pass @orzfly 你是对的 |
5
Vegetable 150 天前
至少在 py3.11 里这个报错已经被捕获了, 从 py2.7 的代码来看,这地方尝试写 file or sys.stderr ,因此可以确定是 sys.stderr 为 None 导致的。
看起来这是 argparse 这个包的设计问题, 可以考虑升级 python 版本,当然这个有点伤筋动骨 可以考虑移除 argparse 的依赖 可以考虑 https://stackoverflow.com/questions/29935283/how-to-set-custom-output-handlers-for-argparse-in-python 魔改 argparse ,其实也只要改一个方法 |