小白在努力05787 2023-11-20 02:25 采纳率: 66.7%
浏览 28
已结题

写了一个python程序,pyinstaller打包后无法运行,求帮助(附完整代码)

以下代码pyinstaller打包后无法运行,代码功能是创建web_data_dir文件夹存储json文件当作保存网址的收藏夹,并可以通过webbrowser打开网址


import json
import os
import webbrowser
import time

tim1=time.strftime('%Y.%m.%d %A %H:%M:%S %p')
data_path='web_data_dir'
doing_path=os.getcwd()
line='-'*40
info = F'''
=========================<<<欢迎使用本程序!>>>=========================
                                                                  {tim1}
'''

#创建网站库与默认收藏夹(默认执行)
def mkweb_data_dir():
    all_dir=os.listdir(doing_path)
    default_dir='web_data_dir'
    if default_dir not in all_dir:
        os.mkdir(default_dir)
    os.chdir('web_data_dir')
    if os.path.exists('默认收藏夹.json')==False:
        with open('默认收藏夹.json','w',encoding='utf_8') as f:
            password=0
            json.dump({
                "Password": password,
                "URL": {"1": ["百度", "https://www.baidu.com/"],
                        "2": ["安徽工程大学官网", 'https://www.ahpu.edu.cn/'],
                        "3": ["超星学习通", 'i.chaoxing.com'],
                        "4":["学习通刷课工具",'https://microsoftedge.microsoft.com/addons/detail/%E7%AF%A1%E6%94%B9%E7%8C%B4/iikmkjmpaadaobahmlepeloendndfphd'],
                        "5": ["中国知网", 'https://www.cnki.net/'],
                        "6": ["智慧团建",'https://zhtj.youth.cn/zhtj/'],
                        '7': ['CSDN官网', 'https://www.csdn.net/'],
                        '8': ['虚拟仿真实验', 'http://211.86.232.110:7000/'],
                        '9': ['安装.netFramework3.5', 'https://download.microsoft.com/download/0/6/1/061F001C-8752-4600-A198-53214C69B51F/dotnetfx35setup.exe'],
                        '10': ['安装实验大厅', 'http://172.16.5.37:8005/Upload/LabRoom/%E8%99%9A%E6%8B%9F%E8%BF%90%E8%A1%8C%E7%8E%AF%E5%A2%83V5.7.exe'],
                        '11': ['查看电脑.netFramework3.5安装状态方法', 'https://jingyan.baidu.com/article/d71306359d1da913fdf47585.html'],
                        '12': ['四六级报考与成绩查询', 'https://z325250.weixin.xdf.cn/wechat/series/detail?id=68775'],
                        '13': ['外网接入安徽工程大学校园网指南', 'https://metc.ahpu.edu.cn/_t501/2016/0516/c7234a39783/page.psp'],
                        '14': ['四六级报考与成绩查询', 'https://cet.neea.edu.cn/'],
                        '15': ['vs code安装包下载', 'https://vscode.cdn.azure.cn/stable/d037ac076cee195194f93ce6fe2bdfe2969cc82d/VSCodeUserSetup-x64-1.84.0.exe'],

                        }
            }, f)
    os.chdir(doing_path)

# mkweb_data_dir()

#-----------------------------------------------------------------------------------------------------------
#新建个人收藏夹
def mk_web_favorite():
    while True:
        user_webfavorite_name=input('请输入收藏夹名称:')
        all_dir = os.listdir(data_path)
        if user_webfavorite_name in all_dir:
            print('该收藏夹已经存在!')
        else:
            user_password=input(f'请为《{user_webfavorite_name}》设置一个密码(直接Enter默认无密码)')
            if user_password:
                os.chdir(data_path)
                with open(fr'{user_webfavorite_name}.json','w',encoding='utf-8') as f:
                    # url_=OrderedDict()
                    json.dump({
                        "Password":user_password,
                        "URL":{"1":["百度","https://www.baidu.com/"]}
                               },f)      #"URL":{"序号":['网页名称+:',‘网址’]}
                print(line+'<创建成功>'+line)
                os.chdir(doing_path)
            else:
                user_password=None
                os.chdir(data_path)
                with open(fr'{user_webfavorite_name}.json','w',encoding='utf-8') as f:
                    json.dump({
                        "Password":user_password,
                        "URL":{"1":["百度","https://www.baidu.com/"]}
                               },f)
                # {"Password":user_password,"URL":{"序号":['网页名称+:',‘网址’]}}
                print(line+'<创建成功>'+line)
                os.chdir(doing_path)
        user_select = input('<返回主界面?y/n(Enter默认返回)>').strip()
        if user_select == 'n' or user_select == 'N':
            continue
        elif user_select != 'n' or user_select != 'N':
            break
f_4=mk_web_favorite

#---------------------------------------------------------------------------------------------------------
#保存网站(默认保存在默认收藏夹)
def save_web_url():
        while 1:
            favorit_list = os.listdir('web_data_dir')
            print(line+'<收藏夹列表>'+line)
            for j in favorit_list:
                print(j[:-5])
            user_select_favorit=input('请输入需要存入的收藏夹名称:')#输入0返回主界面
            user_select_favorit1 = user_select_favorit + '.json'
            if is_se_fa_in_dic(user_select_favorit1):
                js_dict = open_user_webfavorit(user_select_favorit)
            #json文件左右内容 js_dict={"Password": null, "URL": {"1": ["a","http:/"]}}
                Password=js_dict.get("Password")
                url_dict = js_dict.get("URL")   #url_dict="URL"={"序号":['网页名称+:',‘网址’]}}
        #---------------------------------------------------
                last_key=list(url_dict.keys())[-1]
                last_key=int(last_key)                  #定义序号
                last_key=last_key+1
                url_serial_number=str(last_key)
            #----------------------------------------------------
                url = input('请输入需要保存的网址:')
                url_name=input('请输入网页名称:')             #保存数据到有序字典
                url_dict.setdefault(url_serial_number,[url_name,url])
                new_user_dic={"Password":Password,"URL":url_dict}
                os.chdir(data_path)
                with open(f'{user_select_favorit}.json', 'w', encoding='utf-8') as f:
                    json.dump(new_user_dic,f)
                os.chdir(doing_path)
                user_select = input('<返回主界面?y/n(Enter默认不返回主界面)>').strip()
                if user_select == 'n' or user_select == 'N':
                    continue
                elif user_select != 'N' or user_select != 'n':
                    break
        #---------------------------------------------------
            else:
                print(line+'------>输入无效!<------'+line)
                user_s=input('<存入默认收藏夹?y/n(Enter默认返回主界面)>')
                if user_s=='Y' or user_s=='y':
                    js_dict = open_user_webfavorit('默认收藏夹')
                # json文件左右内容 js_dict={"Password": null, "URL": {"1": ["a","http:/"]}}
                    Password = js_dict.get("Password")
                    url_dict = js_dict.get("URL")  # url_dict="URL"={"序号":['网页名称+:',‘网址’]}}
                # ---------------------------------------------------
                    last_key = list(url_dict.keys())[-1]
                    last_key = int(last_key)  # 定义序号
                    last_key = last_key + 1
                    url_serial_number = str(last_key)
                # ----------------------------------------------------
                    url = input('请输入需要保存的网址:')
                    url_name = input('请输入网页名称:')  # 保存数据到有序字典
                    url_dict.setdefault(url_serial_number, [url_name, url])
                    new_user_dic = {"Password": Password, "URL": url_dict}
                    os.chdir(data_path)
                    with open('默认收藏夹.json', 'w', encoding='utf-8') as f:
                        json.dump(new_user_dic, f)
                    os.chdir(doing_path)
                    user_select = input('<返回主界面?y/n(Enter默认不返回主界面)>').strip()
                    if user_select == 'y' or user_select == 'Y':
                        break
                    elif user_select != 'y' or user_select != 'Y':
                        continue
                else:
                    break
  # url_dict="URL":{"序号":['网页名称+:',‘网址’]}
f_1=save_web_url

#--------------------------------------------------------------------------------------------------------

#打开默认收藏夹网址
def open_default_url():
    js_dict=open_user_webfavorit('默认收藏夹')
    url_dict = js_dict.get("URL")  # url_dict="URL":{"序号":['网页名称',‘网址’]}
    while 1:
        print(line+'<保存的网址列表>'+line)
        for key, vale in url_dict.items():
            print(f"{key}.{vale[0]}:{vale[1]}")
        url_key = input('请输入网址序号:')
        try:
            a, url = get_value(url_key, url_dict)
        except TypeError:
            if stop_lopp:
                break
            continue
        webbrowser.open(url)
        user_select = input(line+'<返回主界面?y/n>'+line).strip()
        if user_select == 'y' or user_select == 'Y':
            break
        elif user_select != 'y' or user_select != 'Y':
            continue
f_6=open_default_url

#------------------------------------------------------------------------------------------------------------

#获取URL字典里的网址
stop_lopp=False
def end_lopp():
    global stop_lopp
    stop_lopp=True
    #定义一个手动结束循环的函数
def get_value(url_key,dic):
    try:
        dic_=dic[url_key]
        return dic_ , dic_[1]    #{"Password": null, "URL": {"1": ["a:","http:/"]}}
    except Exception:
        print(line+'-->输入无效<-!'+line)
        user_select = input('<返回上级页面?y/n>')
        if user_select == 'y' or user_select == 'Y':
            end_lopp()


def get_value1(url_key,dic):
    try:
        dic_=dic[url_key]
        return dic_ , dic_[1]    #{"Password": null, "URL": {"1": ["a:","http:/"]}}
    except Exception:
        print('------------------------->输入无效<!--------------------------')
        end_lopp()

def is_se_fa_in_dic(user_select_favorit1):
    return user_select_favorit1 in os.listdir('web_data_dir')
#判断用户选择收藏夹是否存在

#打开个人收藏夹中的网页
# {"Password":user_password,"URL":{"序号":['网页名称+:',‘网址’]}}
def open_user_webfavorit_list():
    while 1:
        favorit_list=os.listdir('web_data_dir')
        print(line+'<收藏夹列表>'+line)
        for j in favorit_list:
            print(j[:-5])
        user_select_favorit=input('请输入需要打开的收藏夹(输入0返回主界面)')
        if user_select_favorit=='0':
            break
        user_select_favorit1=user_select_favorit+'.json'
        if is_se_fa_in_dic(user_select_favorit1):
            js_dict = open_user_webfavorit(user_select_favorit)
            user_password = js_dict.get("Password")
            if user_password ==None:
                url_dict = js_dict.get("URL")#url_dict={"序号":['网页名称+:',‘网址’]}
                print(line+'<保存的网址列表>'+line)
                for key,vale in url_dict.items():
                    print(f"{key}.{vale[0]}:{vale[1]}")
                # 打开网址()
                while 1:
                    url_key=input('请输入网址序号)')
                    try:
                        a,url=get_value(url_key,url_dict)
                    except TypeError:
                        if stop_lopp:
                            break
                        continue
                    webbrowser.open(url)
                    user_select = input('<返回主界面?y/n(Enter默认不返回)>').strip()
                    if user_select == 'y' or user_select == 'Y':
                        break
                    elif user_select != 'y' or user_select != 'Y':
                        continue

            elif user_password!=None:
                password0 = input('请输入密码:')
                if password0 == user_password:
                    url_dict = js_dict.get("URL")
                    print(line+'<保存的网址列表>'+line)
                    for key, vale in url_dict.items():
                        print(f"{key}.{vale[0]}:{vale[1]}")
                    # 打开网址
                    while 1:
                        url_key = input('请输入网址序号)')
                        try:
                            a, url = get_value(url_key, url_dict)
                        except TypeError:
                            if stop_lopp:
                                break
                            continue
                        webbrowser.open(url)
                        user_select = input('<返回主界面?y/n(Enter默认不返回)>').strip()
                        if user_select == 'y' or user_select == 'Y':
                            break
                        elif user_select != 'y' or user_select != 'Y':
                            continue


        else:
            print('该收藏夹不存在!')
            #以下默认不返回
            user_select = input('---------------<返回主界面?y/n(Enter默认不返回)>----------------').strip()
            if user_select == 'y' or user_select == 'Y':
                break
            elif user_select != 'y' or user_select != 'Y':
                continue
f_3=open_user_webfavorit_list

f_0=exit
#---------------------------------------------------------------
#打开收藏夹(获取json文件内容)
def open_user_webfavorit(user_select_favorit):
    os.chdir(data_path)
    with open(fr'{user_select_favorit}.json','r',encoding='utf-8') as f1:
        js_dict=json.load(f1)
    os.chdir(doing_path)
    return js_dict    #json文件里的所有内容


#---------------------------------------------------------------------------------------------------------------

#删除收藏夹
def del_favorit():
    while 1:
        favorit_list = os.listdir('web_data_dir')
        print(line + '<收藏夹列表>' + line)
        for j in favorit_list:
            print(j[:-5])
        user_select_favorit = input('请输入需要删除的收藏夹(输入0返回主界面):')
        if user_select_favorit == '0':
            break
        user_select_favorit1=user_select_favorit+'.json'
        if is_se_fa_in_dic(user_select_favorit1):
            js_dict=open_user_webfavorit(user_select_favorit)   #js_dict={"Password": 0, "URL": {"1": ["\u767e\u5ea6", "https://www.baidu.com/"],
            user_password=js_dict.get("Password")
            if user_password==None:
                u_s=input(f'确认删除收藏夹<{user_select_favorit}>?y/n')
                if u_s=='Y' or u_s=='y':
                    os.chdir(data_path)
                    os.remove(user_select_favorit1)
                    os.chdir(doing_path)
                    print(line+'>删除成功!<'+line)
                    break
                else:
                    print(line + '>已取消操作<' + line)
                    user_select = input('<返回上级页面?y/n(Enter默认不返回)>').strip()
                    if user_select == 'y' or user_select == 'Y':
                        break
                    elif user_select != 'y' or user_select != 'Y':
                        continue
            elif user_password != None:
                password0 = input('请输入密码:')
                if password0 == user_password:
                    u_s = input(f'确认删除收藏夹<{user_select_favorit}>?y/n')
                    if u_s == 'Y' or u_s == 'y':
                        os.chdir(data_path)
                        os.remove(user_select_favorit1)
                        os.chdir(doing_path)
                        print(line + '>删除成功!<' + line)
                        break
                    else:
                        print(line+'>已取消操作<'+line)
                        user_select = input('<返回上级页面?y/n(Enter默认不返回)>').strip()
                        if user_select == 'y' or user_select == 'Y':
                            break
                        elif user_select != 'y' or user_select != 'Y':
                            continue
        else:
            print(line+'>输入无效!<'+line)
            break
ff1=del_favorit
#--------------------------------------------------
#删除网址
def del_url(url_key,url_dict,user_select_favorit,js_dict):
    Password=js_dict.get("Password")
    #-----------------------------------------------------------
    url_key_int=int(url_key)
    d_l=list(url_dict.keys())
    d_l.remove(url_key)
    d_l_int=[int(b) for b in d_l]
    d_l_int=[x-1 if x>url_key_int else x for x in d_l_int]
    d_1=[str(a) for a in d_l_int]
    d_v=list(url_dict.values())
    new_dict={key:value for key,value in zip(d_1,d_v)}
    #------------------------------------------------------------
    os.chdir(data_path)
    # os.remove(user_select_favorit+'.json')
    with open(f"{user_select_favorit}.json",'w',encoding='utf-8') as f:
        json.dump({
            "Password":Password,
            "URL":new_dict},f)
    os.chdir(doing_path)
    print(line+'<删除成功>'+line)

ff_d=del_url
#----------------------
#改网址
def change_url(url_key,url_dict,user_select_favorit,js_dict):
    new_url=input("请输入新网址:")
    url_name=input("请输入网址名称:")
    new_list=[url_name,new_url]
    Password=js_dict.get("Password")
    url_dict.update({url_key:new_list})
    os.chdir(data_path)
    with open(f"{user_select_favorit}.json",'w',encoding='utf-8') as f:
        json.dump({
            "Password":Password,
            "URL":url_dict},f)
    os.chdir(doing_path)
    print(line+'<修改成功>'+line)
ff_c=change_url

#删改网址
def dc_web_url():
    while 1:
        favorit_list = os.listdir('web_data_dir')
        print(line + '<收藏夹列表>' + line)
        for j in favorit_list:
            print(j[:-5])
        user_select_favorit = input('请选择收藏夹(输入0返回主界面):')
        if user_select_favorit == '0':
            break
        user_select_favorit1=user_select_favorit+'.json'
        if is_se_fa_in_dic(user_select_favorit1):
            js_dict=open_user_webfavorit(user_select_favorit)   #js_dict={"Password": 0, "URL": {"1": ["\u767e\u5ea6", "https://www.baidu.com/"],
            user_password=js_dict.get("Password")

            if user_password == None:
                url_dict = js_dict.get("URL")#url_dict={"序号":['网页名称+:',‘网址’]}
                print(line+'<保存的网址列表>'+line)
                for key1,vale1 in url_dict.items():
                    print(f"{key1}.{vale1[0]}:{vale1[1]}")
                url_key=input('请选择网址序号:')
                print(line+'<选择功能>'+line)
                for k in fun_dc:
                    print(f'{k}:', fun_dc[k][0])
                u_ss=input('请选择需要的操作:')
                if u_ss.isdigit() and u_ss in ['1','2']:
                    u_ss1=int(u_ss)
                    fun_dc[u_ss1][1](url_key,url_dict,user_select_favorit,js_dict)
                    break
                else:
                    print(line+'>输入无效!<'+line)
                    break
            elif user_password != None:
                password0 = input('请输入密码:')
                if password0 == user_password:
                    url_dict = js_dict.get("URL")  # url_dict={"序号":['网页名称+:',‘网址’]}
                    print(line + '<保存的网址列表>' + line)
                    for key1, vale1 in url_dict.items():
                        print(f"{key1}.{vale1[0]}:{vale1[1]}")
                    url_key = input('请选择网址序号:')
                    print(line + '<选择功能>' + line)
                    for k in fun_dc:
                        print(f'{k}:', fun_dc[k][0])
                    u_ss = input('请选择需要的操作:')
                    if u_ss.isdigit() and u_ss in ['1', '2']:
                        u_ss1 = int(u_ss)
                        fun_dc[u_ss1][1](url_key,url_dict,user_select_favorit,js_dict)
                        break
                    else:
                        print(line + '>输入无效!<' + line)
                        break
        else:
            print(line + '>输入无效!<' + line)
            break
    pass
ff2=dc_web_url

#管理(删除收藏夹or删改网址)
def manage():
    while 1 :
        for i in fun_manage:
            print(f'{i}:',fun_manage[i][0])
        manage_user_select= input('请输入需要的功能序号:')
        if manage_user_select.isdigit() and manage_user_select in ['0','1','2']:
            manage_user_select=int(manage_user_select)
            fun_manage[manage_user_select][1]()
            user_select = input('-----<返回<<<主界面>>>?y/n(Enter默认返回)>----').strip()
            if user_select == 'n' or user_select == 'N':
                continue
            elif user_select != 'n' or user_select != 'N':
                break
        else:
            print(line+'输入无效'+line)
            user_select = input('<返回主界面?y/n(Enter默认返回)>').strip()
            if user_select == 'n' or user_select == 'N':
                continue
            elif user_select != 'n' or user_select != 'N':
                break
f_2=manage

#---------------------------------以下是函数字典--------------------------------------------------------------
fun1={
0:['退出程序',f_0],
1:['保存网站',f_1],
2:['打开默认收藏夹网页',f_6],
3:['打开个人收藏夹中的网页',f_3],
4:['新建个人收藏夹',f_4],
5:['管理收藏夹',f_2]
}
fun_manage={
1:['删除收藏夹',ff1],
2:['删改收藏夹中的网址',ff2]
}
fun_dc={
1:['删除网址',ff_d],
2:['更改网址',ff_c]
}
#----------------------------用户主界面--------------------------------
if __name__ == '__main__':
    mkweb_data_dir()
    print(info)
    input(f'<<Enter进入主程序>>')
    while True:
        print(line+'<<主界面>>'+line)
        for i in fun1:
            print(f'{i}:', fun1[i][0])
        user_select_fun1 = input('请输入需要的功能序号:')
        if user_select_fun1.isdigit() and user_select_fun1 in ['0', '1', '2', '3', '4', '5']:
            user_select_fun1 = int(user_select_fun1)
            fun1[user_select_fun1][1]()
        else:
            print(line+'>请正确输入!<'+line)
  • 写回答

8条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-11-20 08:28
    关注

    引自强大而免费的微信小程序:皆我百晓生

    如果打包后的exe文件无法在终端运行或者双击后窗口一闪而过,可能是由于代码中存在一些问题导致的。

    你可以尝试以下几个步骤来解决问题:

    1.检查代码中的依赖项:确保代码中使用的所有模块(如os、time、webbrowser、json等)都已经正确导入,并且可以在打包后的环境中正确使用。如果有任何依赖项缺失或者导入错误,可以使用pyinstaller的--hidden-import选项来添加缺失的模块依赖。

    例如,使用命令

    pyinstaller -F --hidden-import os --hidden-import time --hidden-import webbrowser --hidden-import json your_script.py
    

    来添加缺失的模块依赖。

    2.检查是否有错误输出信息被忽略:在打包过程中,很可能会有一些错误输出信息被忽略,导致你无法看到具体错误的原因。你可以尝试在打包命令中添加--console选项,以便在运行时在终端窗口中显示任何错误输出信息。

    例如,使用命令

    pyinstaller -F --hidden-import os --hidden-import time --hidden-import webbrowser --hidden-import json --console your_script.py
    

    来添加--console选项。

    3.检查是否有异常处理机制:在打包的时候,可能会遇到一些代码异常或错误,而这些异常并没有被正确处理。你可以在代码中添加适当的异常处理机制来捕获并处理这些异常。

    例如,使用try-except语句来捕获可能的异常,然后在异常处理块中输出错误信息。

    try:
        # 你的代码
    except Exception as e:
        print("Error:", str(e))
    

    希望以上步骤可以帮助你解决问题,如果还有其他问题,请提供更多具体的错误信息或代码示例,我会尽力帮助你。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月20日
  • 创建了问题 11月20日

悬赏问题

  • ¥15 动态列线图发布后出现An error has occurred. Check your logs or contact the app author for clarification.
  • ¥20 VM虚拟机崩溃,重新登录故障,移除加密访问。
  • ¥15 双VSG并网系统,matlab,稳态工作点求解
  • ¥15 关于#Stata#的问题:数据是面板数据,SPSS里面不能控制年份和时间,所以只能用Stata做
  • ¥20 基于基于NioEventLoop线程阻塞问题
  • ¥20 我需要"hill48屈服模型 等向强化 非线性硬化"的abaqus本构子程序(umat或者vumat)对应的理论推导过程。
  • ¥15 基于ucc28019的pfc电路中芯片一直不工作
  • ¥15 yolov8在3588板子端c++推理报错
  • ¥50 unitywebrequest分段下载导致报错,如何解决?
  • ¥15 错误使用 gretna_GUI_PreprocessInterface>RunBtn_Callback