小能豆

python代码不执行exe文件中的所有代码行

python

我已经使用 pyinstaller 对其进行转换,但代码并未执行我在 exe 文件和 cmd 中的所有行代码,但要注意的是原始行代码在 vs 代码中运行完美

我还尝试了 py 安装程序,另一个名为“auto py to exe”,这是我唯一想让代码在用户窗口中运行的东西

import datetime

from dateutil.relativedelta import relativedelta

print("Welcome to the Recharge Assistant")

# Get today's date
today = datetime.date.today()

# Get the same day next year
same_day_next_year = datetime.date(today.year + 1, today.month, today.day)

# Get a valid date from the user
while True:
    user_input = input("Please enter your current validity (DD/MM/YYYY), or 'q' to quit: ")

    # Check if user wants to quit
    if user_input.lower() == 'q':
        break

    try:
        # Convert user's input to a date object
        user_date = datetime.datetime.strptime(user_input, "%d/%m/%Y").date()

        # Check if user's input is in the past or exceeds the same day next year
        if user_date < today:
            user_date = today
        elif user_date > same_day_next_year:
            user_date = same_day_next_year

        # Calculate the number of days between user_date and same_day_next_year
        DAYS_DIFF = (same_day_next_year - user_date).days
        if DAYS_DIFF == 0:
            print("You may have entered a wrong year or date!")

        # Handle leap year
        if DAYS_DIFF == 366:
            DAYS_DIFF = 365

        # Calculate the number of months and days in days_diff
        months = DAYS_DIFF // 30
        days = DAYS_DIFF % 30

        # Print the updated user date
        print("Current user Validity:", user_date)
        print("Max number of days that can be recharged until next year:", DAYS_DIFF)
        print(f"Number of months that can be recharged: {months} months and {days} days")

        while True:
            try:
                get_month = int(input("How many months do you need? "))
                get_days = get_month * 30
                new_date = user_date + relativedelta(months=get_month)
                print(f"You entered {get_month} months which is {get_days} days.")
                print("The resulting date will be:", new_date)
                break
            except ValueError:
                print("Invalid input. Please enter a valid integer.")

    except ValueError:
        print("Invalid date format. Please enter a valid date in the format DD/MM/YYYY.")

    # Add a break statement if the user entered a valid date to allow for quitting
    if user_input.lower() != 'q':
        break

阅读 160

收藏
2023-06-13

共1个答案

小能豆

当使用PyInstaller将Python代码转换为可执行文件(exe)时,有时会出现某些行代码无法在生成的可执行文件中执行的问题。这通常是由于PyInstaller无法正确地检测和解析所有的依赖关系和引用导致的。

在您的情况下,问题可能是由于导入的dateutil.relativedelta模块未能被正确识别和包含在生成的可执行文件中所致。为了解决这个问题,您可以尝试使用hiddenimports参数指定需要明确包含的依赖项。

以下是一个示例命令,您可以将其用于生成可执行文件:

pyinstaller --hidden-import dateutil.relativedelta your_script.py

请确保在命令中将your_script.py替换为您的实际脚本文件名。使用--hidden-import参数可以告诉PyInstaller显式地包含指定的依赖项,以便在生成的可执行文件中正确加载它们。

尝试使用上述命令重新生成可执行文件,并查看是否可以正确执行所有行代码。如果问题仍然存在,您可以尝试其他解决方案,例如检查PyInstaller的版本,查找相关的问题报告或尝试使用其他打包工具。

另外,确保在转换为可执行文件之前,您的Python脚本在命令行中可以正常运行,以验证代码本身没有其他问题。

2023-06-13