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

Python使用tarfile.add消除'tar: Removing leading `/’'警告的方法

解决tar创建时的"Removing leading `/' from member names"警告

问题原因

这个警告是因为添加到tar包的路径包含了绝对路径前缀,或者tar解析时认为路径带了不必要的前置/,它会自动去掉这些前缀以保证tar包的可移植性。命令行里的-C参数是通过切换到目标目录再添加文件,让tar里的路径变成相对路径来避免警告。

Python实现方式

有两种简单的实现方式,对应命令行-C的效果:

方法1:正确设置arcname参数

直接在tar.add()里把arcname设为你希望在tar包中显示的路径(比如只保留目标目录名,去掉前面的./sample/前缀),这样就不会产生带前置/的路径:

import os
import tarfile

def create_tarball(self, dir_name):    
    try:
        target_path = os.path.join("./sample", dir_name)
        # 把arcname设为目录名,tar里的路径就是dir_name/xxx,而非./sample/dir_name/xxx
        with tarfile.open("example.tar", "w:tar") as tar:
            tar.add(target_path, arcname=dir_name)
    except Exception as e:
        raise e

如果想把dir_name目录下的所有内容直接放到tar包根目录(对应tar -C ./sample/dir_name -cf example.tar .),可以把arcname设为.:

tar.add(target_path, arcname=".")

方法2:临时切换工作目录

模拟-C参数的核心逻辑——先切换到目标父目录,再添加文件,最后恢复原工作目录:

import os
import tarfile

def create_tarball(self, dir_name):    
    try:
        original_dir = os.getcwd()
        # 切换到./sample目录,对应tar -C ./sample
        os.chdir("./sample")
        with tarfile.open(os.path.join(original_dir, "example.tar"), "w:tar") as tar:
            tar.add(dir_name)
    except Exception as e:
        raise e
    finally:
        # 无论成功失败,都切回原目录
        os.chdir(original_dir)

原代码的问题

你原来的arcname=os.path.basename(".sample/")是错误的,.sample/的basename是空字符串,这会导致路径处理异常,也是触发警告的原因之一,修正后就能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:34:55