停止shutil.make_archive将存档添加到自身

时间:2018-03-24 17:42:00

标签: python python-3.x archive shutil

App dir

中有Release dir
$ cd Release
$ tree
.
`-- App
    |-- App.exe
    ..........

我正试图在App-1.0.zip目录中Release创建App及其所有内容。这是在解压App-1.0.zip之后我会得到这个App目录。

我尝试了shutil.make_archive但是当我这样做时

import shutil

shutil.make_archive('App-1.0', 'zip', '.')

来自Release目录,除App-1.0.zip目录外,我在App-1.0.zip内获得48字节App。也就是说,它将这个未完成的档案添加到自身。

有没有办法避免这种情况,除了在临时目录中创建档案并移动?

我尝试设置base_dir并使用App作为root_dir

shutil.make_archive('App-1.0', 'zip', 'App', 'App')

但是当我设置App时,我收到错误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

Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32

2 个答案:

答案 0 :(得分:1)

以下是一些有用的解决方案:

# curdir: Release
shutil.make_archive('App-1.0', 'zip', '.', 'App')

# curdir: ../Release
shutil.make_archive('Release/App-1.0', 'zip', 'Release', 'App')

答案 1 :(得分:1)

我在与此斗争的过程中所学到的是:

shutil.make_archive('App-1.0', 'zip', '.', 'App')

虽然'App-1.0'在技术上是“文件名”,但必须将其表示为不带扩展名的文件路径('c:\ myfiles \ myzipfile')。我尚未使用路径名称的所有变体,因此某些快捷方式可能会起作用(例如:“ Release / App-1.0”)。