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文件配置
- 生成Spec文件:
pyinstaller --onefile converter.py - 打开生成的
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__")], # 其余参数保持不变 ) - 用Spec文件重新打包:
pyinstaller converter.spec
验证
修改后重新打包,运行EXE即可正常执行视频/播放列表下载操作。
内容的提问来源于stack exchange,提问作者thing
相关产品推荐
相关产品推荐

