You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyInstaller打包Python代码为exe后无法完整执行的问题求助

解决PyInstaller打包exe无法完整执行的问题

核心原因

打包过程中未正确包含第三方依赖python-dateutil,或打包参数配置不当,导致exe运行时缺失必要模块。

解决方案

1. 确保打包环境依赖完整

打包前确认当前Python环境已安装所需依赖:

pip install python-dateutil

2. 使用PyInstaller命令行打包(推荐)

打开cmd,切换到脚本所在目录,执行以下命令:

pyinstaller --onefile --console --hidden-import=dateutil.relativedelta your_script_name.py
  • --onefile:生成单个独立exe文件
  • --console:强制显示控制台窗口,便于查看运行时错误信息
  • --hidden-import:手动指定PyInstaller未自动检测到的依赖模块

3. auto-py-to-exe工具配置调整

若使用图形化工具auto-py-to-exe:

  • 在Console Window选项中选择"Console Based"
  • 切换到Advanced标签,在Hidden Imports中添加dateutil.relativedelta
  • 点击"Convert .py to .exe"重新打包

4. 正确测试运行方式

不要直接双击exe,而是打开cmd,导航到exe所在目录,输入exe文件名运行,这样能看到具体错误提示(如缺失模块),方便排查问题。

中文适配后的原代码

import datetime
from dateutil.relativedelta import relativedelta

print("欢迎使用充值助手")

# 获取今日日期
today = datetime.date.today()

# 获取明年今日
same_day_next_year = datetime.date(today.year + 1, today.month, today.day)

# 获取用户输入的有效日期
while True:
    user_input = input("请输入当前有效期(格式:DD/MM/YYYY),或输入'q'退出:")

    # 检查用户是否要退出
    if user_input.lower() == 'q':
        break

    try:
        # 将用户输入转换为日期对象
        user_date = datetime.datetime.strptime(user_input, "%d/%m/%Y").date()

        # 处理输入日期在过去或超过明年今日的情况
        if user_date < today:
            user_date = today
        elif user_date > same_day_next_year:
            user_date = same_day_next_year

        # 计算用户日期到明年今日的天数差
        DAYS_DIFF = (same_day_next_year - user_date).days
        if DAYS_DIFF == 0:
            print("你可能输入了错误的年份或日期!")

        # 处理闰年情况
        if DAYS_DIFF == 366:
            DAYS_DIFF = 365

        # 将天数差转换为月和天
        months = DAYS_DIFF // 30
        days = DAYS_DIFF % 30

        # 输出更新后的用户日期
        print("当前用户有效期:", user_date)
        print("可充值至明年的最大天数:", DAYS_DIFF)
        print(f"可充值的月数:{months}个月零{days}天")

        while True:
            try:
                get_month = int(input("你需要充值几个月?"))
                get_days = get_month * 30
                new_date = user_date + relativedelta(months=get_month)
                print(f"你输入了{get_month}个月,相当于{get_days}天。")
                print("充值后的日期将是:", new_date)
                break
            except ValueError:
                print("输入无效,请输入有效的整数。")

    except ValueError:
        print("日期格式无效,请输入格式为DD/MM/YYYY的有效日期。")

    # 若用户输入有效日期,退出循环允许退出程序
    if user_input.lower() != 'q':
        break

内容的提问来源于stack exchange,提问作者Ahmad Nour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:07:31