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

PyInstaller打包Pytube下载器为exe后无法运行的问题求助

解决Pytube打包为单文件EXE后无法运行的问题

错误根源

打包后的EXE运行时,Pytube尝试访问临时目录中的pytube/__cache__文件夹,但该目录未被自动创建或未被PyInstaller正确包含,触发FileNotFoundError。

解决方案

方案1:禁用Pytube缓存(最简单)

直接在代码中关闭Pytube的缓存功能,跳过缓存目录的访问逻辑:

import tkinter as tk
from pytube import YouTube, Playlist
from pytube.innertube import InnerTube
import os

# 禁用缓存,避免创建/访问缓存目录
InnerTube.cache_enabled = False

# 原有代码保持不变
HEIGHT = 500
WIDTH = 600
# ... 其余代码 ...

方案2:手动创建缓存目录

在代码中添加逻辑,检查并生成Pytube所需的缓存目录:

import tkinter as tk
from pytube import YouTube, Playlist
import os
import pytube

# 获取Pytube模块路径,创建缓存文件夹
pytube_module_dir = os.path.dirname(pytube.__file__)
cache_folder = os.path.join(pytube_module_dir, "__cache__")
if not os.path.exists(cache_folder):
    os.makedirs(cache_folder)

# 原有代码保持不变
HEIGHT = 500
WIDTH = 600
# ... 其余代码 ...

方案3:通过PyInstaller Spec文件配置

  1. 生成Spec文件:
    pyinstaller --onefile converter.py
    
  2. 打开生成的converter.spec,在Analysis的datas参数中添加缓存目录映射(先确保本地Pytube目录下有__cache__空文件夹,没有则手动创建):
    import os
    import pytube
    
    a = Analysis(
        ['converter.py'],
        pathex=[],
        binaries=[],
        datas=[(os.path.join(os.path.dirname(pytube.__file__), "__cache__"), "pytube/__cache__")],
        # 其余参数保持不变
    )
    
  3. 用Spec文件重新打包:
    pyinstaller converter.spec
    

验证

修改后重新打包,运行EXE即可正常执行视频/播放列表下载操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:00:09