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

Python PDF重命名工具转exe后无法识别PDF文件的问题排查

问题分析与解决:PySide6 PDF重命名工具转exe后无法识别PDF文件

问题原因

核心问题出在打包成单文件(onefile)后,脚本获取的目录路径错误:

  • 直接用Python运行.pyw时,os.path.dirname(os.path.realpath(__file__))指向脚本所在目录,也就是PDF文件所在的目标目录。
  • 但auto-py-to-exe或Nuitka的--onefile模式打包后,exe运行时会将程序解压到系统临时目录,此时__file__指向的是临时目录里的解压文件,而非exe实际所在目录——这就导致代码读取PDF时找的是临时目录,自然找不到目标文件。

另外要确认重命名代码里的file_path是否为完整路径:如果file只是文件名,必须用os.path.join(self.directory, file)拼接成完整路径,否则os.rename会因找不到文件静默失败。

调试步骤

  • 开启控制台查看输出:打包时去掉--windows-disable-console参数,重新生成exe。运行后弹出的控制台会显示日志或报错信息,直接确认目录路径是否正确。
  • 添加目录打印代码:在获取目录的代码后加一行打印,打包后运行对比输出目录和exe实际所在目录是否一致:
    print(f"当前读取的目录:{self.directory}")
    
  • 手动指定测试目录:临时把self.directory改成存放测试PDF的绝对路径(比如C:/TestPDFs),打包后测试是否能识别PDF,排除其他代码逻辑问题。

解决方法

1. 修正目录获取逻辑(通用方案)

替换原来的目录获取代码,让程序在打包后能正确识别exe所在目录:

import sys
import os

def get_current_directory():
    if getattr(sys, 'frozen', False):
        # 打包成exe后的运行模式
        return os.path.dirname(sys.executable)
    else:
        # 直接用Python运行的模式
        return os.path.dirname(os.path.realpath(__file__))

# 在你的类中赋值
self.directory = get_current_directory()

2. 确保重命名路径完整

检查重命名代码中的file_path,必须为完整路径:

if date_str:
    file_path = os.path.join(self.directory, file)  # 补全完整路径
    new_file = os.path.join(self.directory, f"{date_str} - {file}")
    os.rename(file_path, new_file)

3. Nuitka打包的额外注意事项

如果用Nuitka打包,除上述修改外,需确保插件和依赖正确加载:

  • 保留--enable-plugin=pyside6参数,确保PySide6的GUI组件正常打包。
  • --follow-imports参数已能自动处理大部分第三方依赖,无需额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:12:58