吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 646|回复: 9
收起左侧

[经验求助] python打包exe文件运行错误

[复制链接]
sjnh 发表于 2023-3-1 01:27
50吾爱币
本帖最后由 sjnh 于 2023-3-1 11:35 编辑

自己用python封装了一个exe文件之后,点击运行,发生如下错误:
Exception in thread Thread-2:
Traceback (most recent call last):
  File "threading.py", line 932, in _bootstrap_inner
  File "threading.py", line 870, in run
  File "playsound.py", line 35, in _playsoundWin
  File "playsound.py", line 30, in winCommand
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5 in position 0: invalid continuation byte


python源码如下:
#-*- coding : utf-8 -*-
# coding:unicode_escape
import os.path
import sys
from pynput import keyboard
from playsound import playsound
from threading import Thread
def onRelease(key):
    dic_sound = {
        "a": resource_path(os.path.join("key","A.mp3")),
        "b": resource_path(os.path.join("key","B.mp3")),
        "c": resource_path(os.path.join("key","C.mp3")),
        "d": resource_path(os.path.join("key","D.mp3")),
        "e": resource_path(os.path.join("key","E.mp3")),
        "f": resource_path(os.path.join("key","F.mp3")),
        "g": resource_path(os.path.join("key","g.mp3")),
        "j": resource_path(os.path.join("key","j.mp3")),
        "n": resource_path(os.path.join("key","n.mp3"))
    }
    try:
        #print(f"用户输入:{key.char}")
        if key.char in "abcdefgjn":
            audio = dic_sound[key.char]
        else:
            audio = ""
except AttributeError:
        #print(f"用户输入:{key.name}")
        if key.name == keyboard.Key.esc:
            audio = dic_sound["a"]
        else:
            audio = ""
if audio != "":
        t = Thread(target=playsound,args=(audio,))
        t.start()
def resource_path(relative_path):
    if getattr(sys,"frozen",False):
        base_path = sys._MEIPASS
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path,relative_path)

listener = keyboard.Listener(on_release=onRelease)
listener.start()
listener.join()

最佳答案

查看完整内容

修改playsound.py文件 1、如果你用PyCharm,就按住CTRL 再点击 from playsound import playsound 的playsound 2、修改55行,可以注释掉 #command = ' '.join(command).encode('utf-16') 改为:command = ' '.join(command) 3、重新打包,打包的话 记得把修改spec ,把资源文件 也就是你的 MP3文件都打包进去。 缺点:多次按键 会直接重复叠加播放,不会结束之 ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

土鸡炖蘑菇 发表于 2023-3-1 01:27
sjnh 发表于 2023-3-1 17:24
可以的,我刚才试了下,你可以分享一下你的做法。我也可以采用你的答案,但是可能分到啊币比较少

修改playsound.py文件
1、如果你用PyCharm,就按住CTRL 再点击 from playsound import playsound 的playsound

2、修改55行,可以注释掉        #command = ' '.join(command).encode('utf-16')
                                         改为:command = ' '.join(command)

3、重新打包,打包的话 记得把修改spec ,把资源文件 也就是你的 MP3文件都打包进去。  


缺点:多次按键 会直接重复叠加播放,不会结束之后再播放 或者中断当前播放
Hacking2heart 发表于 2023-3-1 07:58
可能要把playsound.py贴出来。看报错是编码错误。有可能是GBK的编码你用utf-8去解码了。比如说读取文件的时候要加一下编码格式。
flysnow99 发表于 2023-3-1 07:58
WIN10 WIN11 有些区域设置对UTF-8支持不好

开始-设置-时间和语言-左边的区域与语言-语言-管理语言设置-更改系统区域设置-勾选bate版使用uft-8提供全球语言支持-重启
土鸡炖蘑菇 发表于 2023-3-1 11:30
已测试,找到了解决办法,打包后可以成功运行  播放  。   就是这 25币 太少了吧  改50 教你怎么解决现在这个代码的问题 (提示:不是utf8的问题)
 楼主| sjnh 发表于 2023-3-1 11:36
土鸡炖蘑菇 发表于 2023-3-1 11:30
已测试,找到了解决办法,打包后可以成功运行  播放  。   就是这 25币 太少了吧  改50 教你怎么解决现在这 ...

你好,改完了,可以请教一下吗
 楼主| sjnh 发表于 2023-3-1 12:08
sjnh 发表于 2023-3-1 11:36
你好,改完了,可以请教一下吗

你好,我已经解决了,谢谢啦,采用的三楼的意见,谢谢啦
土鸡炖蘑菇 发表于 2023-3-1 14:05
sjnh 发表于 2023-3-1 12:08
你好,我已经解决了,谢谢啦,采用的三楼的意见,谢谢啦

3楼的只能解决本机的吧?   那打包好了 去别的电脑 能运行吗?
 楼主| sjnh 发表于 2023-3-1 17:24
土鸡炖蘑菇 发表于 2023-3-1 14:05
3楼的只能解决本机的吧?   那打包好了 去别的电脑 能运行吗?

可以的,我刚才试了下,你可以分享一下你的做法。我也可以采用你的答案,但是可能分到啊币比较少
Hylas 发表于 2023-3-2 01:05
这个错误可能是由于文件编码问题引起的。错误提示显示 'utf-8' codec can't decode byte 0xd5 in position 0: invalid continuation byte,说明在尝试使用 UTF-8 解码文件内容时遇到了无效的字符。

有两种解决方法:

尝试更改文件编码。您可以使用文本编辑器(如 Notepad++)打开该文件,并将编码从 UTF-8 更改为其他编码(例如 GBK)。

在代码中处理特殊字符。在您的代码中,特殊字符可能包括文件路径中的非 ASCII 字符。您可以尝试在读取和使用这些路径时进行处理,以确保它们被正确地解码。

例如,在您的代码中,您可以将 resource_path() 函数修改为以下内容,以尝试解决编码问题:

def resource_path(relative_path):
    if getattr(sys,"frozen",False):
        base_path = sys._MEIPASS
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path,relative_path.encode("unicode_escape").decode())

这个修改将在将文件路径返回给操作系统之前,先将其编码为 Unicode 转义序列,然后再进行解码。这样做可以确保特殊字符得到正确处理,并且能够避免编码错误。
快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-20 01:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表