停止shutil.make_archive 向自身添加存档 [英] Stop shutil.make_archive adding archive to itself
问题描述
我在 Release
目录中有 App
目录
I have App
dir inside Release
dir
$ cd Release
$ tree
.
`-- App
|-- App.exe
..........
我正在尝试在 Release
目录中创建 App-1.0.zip
,其中包含 App
及其所有内容.那是在解压 App-1.0.zip
之后我会得到这个 App
目录.
and I am trying to create App-1.0.zip
in the Release
dir containg App
with all its content. That is after unpacking App-1.0.zip
I would get this App
dir.
我尝试了 shutil.make_archive
但是当我这样做时
I tried shutil.make_archive
but when I do this
import shutil
shutil.make_archive('App-1.0', 'zip', '.')
从 Release
目录,除了 App<之外,我在
App-1.0.zip
里面得到 48 字节的 App-1.0.zip
/代码>目录.也就是说,它将这个未完成的档案添加到自己身上.
from Release
dir, I get 48 byte App-1.0.zip
inside App-1.0.zip
besides the App
dir. That is it adds this unfinished archive to itself.
除了在临时目录中创建存档并移动之外,还有什么办法可以避免这种情况吗?
Is there any way to avoid that except creating the archive in temp dir and moving?
我尝试设置 base_dir
并使用 App
作为 root_dir
I tried to set base_dir
and use App
as root_dir
shutil.make_archive('App-1.0', 'zip', 'App', 'App')
但是当我设置 base_dir
时,我得到了一个错误,说没有找到 App
.
but I get error that App
is not found when I set base_dir
.
Traceback (most recent call last):
File ".......archive.py", line 4, in <module>
shutil.make_archive('App-1.0', 'zip', 'App', 'App')
File "C:\Users\Alex\.virtualenvs\....-nAKWzegL\lib\shutil.py", line 800, in make_archive
filename = func(base_name, base_dir, **kwargs)
File "C:\Users\Alex\.virtualenvs\....-nAKWzegL\lib\shutil.py", line 686, in _make_zipfile
zf.write(path, path)
File "C:\Users\Alex\AppData\Local\Programs\Python\Python36-32\Lib\zipfile.py", line 1594, in write
zinfo = ZipInfo.from_file(filename, arcname)
File "C:\Users\Alex\AppData\Local\Programs\Python\Python36-32\Lib\zipfile.py", line 484, in from_file
st = os.stat(filename)
FileNotFoundError: [WinError 2] The system cannot find the file specified: "'App'"
'/App'
和 './App'
相同.使用完整路径它可以工作,但我得到了所有父目录,而不仅仅是 App
.
The same for '/App'
and './App'
. With full path it works, but I get all parent dirs, not just App
.
Python 3.6.4(v3.6.4:d48eceb,2017 年 12 月 19 日,06:04:45)[MSC v.1900 32 位(英特尔)] 在 win32 上
推荐答案
这里有几个对我有用的解决方案:
Here's a couple of solutions that worked or me:
# curdir: Release
shutil.make_archive('App-1.0', 'zip', '.', 'App')
# curdir: ../Release
shutil.make_archive('Release/App-1.0', 'zip', 'Release', 'App')
这篇关于停止shutil.make_archive 向自身添加存档的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!