我已经使用 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
当使用PyInstaller将Python代码转换为可执行文件(exe)时,有时会出现某些行代码无法在生成的可执行文件中执行的问题。这通常是由于PyInstaller无法正确地检测和解析所有的依赖关系和引用导致的。
在您的情况下,问题可能是由于导入的dateutil.relativedelta模块未能被正确识别和包含在生成的可执行文件中所致。为了解决这个问题,您可以尝试使用hiddenimports参数指定需要明确包含的依赖项。
dateutil.relativedelta
hiddenimports
以下是一个示例命令,您可以将其用于生成可执行文件:
pyinstaller --hidden-import dateutil.relativedelta your_script.py
请确保在命令中将your_script.py替换为您的实际脚本文件名。使用--hidden-import参数可以告诉PyInstaller显式地包含指定的依赖项,以便在生成的可执行文件中正确加载它们。
your_script.py
--hidden-import
尝试使用上述命令重新生成可执行文件,并查看是否可以正确执行所有行代码。如果问题仍然存在,您可以尝试其他解决方案,例如检查PyInstaller的版本,查找相关的问题报告或尝试使用其他打包工具。
另外,确保在转换为可执行文件之前,您的Python脚本在命令行中可以正常运行,以验证代码本身没有其他问题。