Pyinstaller打包程序的运行目录不是当前目录
# 配置常量
FFMPEG_DIR = os.path.join(os.path.dirname(__file__), "ffmpeg") # 本地ffmpeg目录
SUPPORTED_FORMATS = ['.mp4', '.avi', '.mov', '.mkv', '.flv', '.wmv'] # 扩展支持格式
def setup_ffmpeg():
"""配置本地FFmpeg路径"""
if sys.platform.startswith('win'):
ffmpeg_path = os.path.join(FFMPEG_DIR, 'ffmpeg.exe')
ffprobe_path = os.path.join(FFMPEG_DIR, 'ffprobe.exe')
else:
ffmpeg_path = os.path.join(FFMPEG_DIR, 'ffmpeg')
ffprobe_path = os.path.join(FFMPEG_DIR, 'ffprobe')
# 验证文件是否存在
if not all(os.path.isfile(p) for p in [ffmpeg_path, ffprobe_path]):
print("错误: 找不到本地FFmpeg组件,请确保存在以下文件:")
print(f" - {ffmpeg_path}")
print(f" - {ffprobe_path}")
sys.exit(1)
# 修改moviepy全局配置
change_settings({"FFMPEG_BINARY": ffmpeg_path,
"FFPROBE_BINARY": ffprobe_path})
- 文件是在当前目录下的,打包成 exe 后运行,出现报错如下:
D:\01_资料\xxx\完成版>01v2s.exe videos
错误: 找不到本地FFmpeg组件,请确保存在以下文件:
- C:\Users\xxx\AppData\Local\Temp\_MEI169042\ffmpeg\ffmpeg.exe
- C:\Users\xxx\AppData\Local\Temp\_MEI169042\ffmpeg\ffprobe.exe
- 也就是说运行时的目录是一个 Temp 目录,而不是当前目录,想要调用这个目录,需要在编译的时候添加如下选项:
--add-data "ffmpeg;ffmpeg" \
- --add-data "ffmpeg;ffmpeg" 表示:
- 第一个 ffmpeg 是本地文件夹路径
- 第二个 ffmpeg 是打包后程序内的目标路径
- 在 Windows 上用 ; 分隔路径,Linux/macOS 用 :