使用python tarfile添加时不对arcname应用normpath

2 投票
1 回答
1067 浏览
提问于 2025-04-17 01:29

我正在使用Python的tarfile库来创建一个gzipped的tar文件。

这个tar文件需要包含绝对路径名,原因我无法控制。(我知道这不是常规做法。)

当我调用

tarobject.add("/foo/xx1", "/bar/xx1")

时,arcname参数中的"/bar/xx1"会经过os.path.normpath()处理,变成了"bar/xx1"

我该如何避免这种情况,确保得到我需要的"/bar/xx1"呢?

我听说可以在某个地方替换掉normpath,但我对Python还比较陌生,不太确定该怎么做,或者这样做会有什么更广泛的影响。

编辑

在查看了这个问题后,我仔细研究了一下tarinfo对象,似乎这样做有效:

my_tarinfo = tarobject.gettarinfo("/foo/xx1")
my_tarinfo.name = "/bar/xx1"
tarobject.addfile(my_tarinfo, file("/foo/xx1"))    

1 个回答

-1

你真是做了一些奇怪的事情。你需要把 /usr/lib64/python/tarfile.py 这个文件复制到你PYTHONPATH中的一个目录里。然后你就可以修改这个文件了。不过,你还需要把你自己的tarfile模块和你的代码打包在一起。

撰写回答