本地Anaconda环境下Colab Notebook解压tar文件遇权限错误求助
问题描述
在本地通过Anaconda运行Colab Notebook时,使用tar解压文件卡住并抛出权限错误:
PermissionError: [Errno 13] Permission denied: 'content\wav2lip-HD.git\objects\pack\pack-96550f853b066e3b45ab460b353c82954661024f.idx'
涉及代码
with tarfile.open('./content/wav2lip-cache.tar.gz', 'r:gz') as tar: current_directory = os.getcwd() print("Current directory:", current_directory) for member in tar.getmembers(): target_path = os.path.join('/', member.name) try: tar.extract(member, '/') except: pass with tarfile.open('./content/wav2lip-HD.tar.gz') as tar: tar.extractall('content')
背景信息
- Notebook根目录位于Documents文件夹,当前为唯一用户,理论上拥有该目录全权限
wget可正常向content文件夹写入文件- 已尝试操作:修改文件夹权限、以管理员权限运行Anaconda Prompt/Navigator、检查代码错误、确认当前目录、关闭Windows Defender,但问题未解决
解决方案
1. 修正第一个解压操作的路径错误
代码第一段试图将文件提取到系统根目录/(Windows下对应C盘根目录),这会触发系统权限限制,即使管理员权限也可能因系统保护机制失败。改为提取到当前Notebook的工作目录:
with tarfile.open('./content/wav2lip-cache.tar.gz', 'r:gz') as tar: current_directory = os.getcwd() print("Current directory:", current_directory) # 直接提取到当前工作目录,替代原循环逐个提取的冗余写法 tar.extractall(current_directory)
2. 明确第二个解压操作的绝对路径
使用相对路径content可能因当前工作目录歧义导致权限异常,改用绝对路径确保指向有权限的目录:
import os # 获取当前Notebook根目录的绝对路径 notebook_root = os.getcwd() target_dir = os.path.join(notebook_root, 'content') with tarfile.open('./content/wav2lip-HD.tar.gz') as tar: tar.extractall(target_dir)
3. 忽略tar包内的原权限标记
部分Linux打包的tar文件会保留原文件权限设置,Windows下解压时可能触发权限冲突,可重置权限后再解压:
import os notebook_root = os.getcwd() target_dir = os.path.join(notebook_root, 'content') with tarfile.open('./content/wav2lip-HD.tar.gz') as tar: for member in tar.getmembers(): # 重置文件权限为当前用户可读写,文件夹为可读写执行 if member.isfile(): member.mode = 0o666 elif member.isdir(): member.mode = 0o777 tar.extractall(target_dir)
4. 切换到content文件夹内执行解压
临时切换到目标文件夹,避免路径解析问题:
import os # 切换到content文件夹 os.chdir('./content') with tarfile.open('../content/wav2lip-HD.tar.gz') as tar: tar.extractall() # 切回原工作目录 os.chdir('..')
内容的提问来源于stack exchange,提问作者romrom83
相关产品推荐
相关产品推荐

