停止shutil.make_archive 向自身添加存档 [英] Stop shutil.make_archive adding archive to itself

查看:42
本文介绍了停止shutil.make_archive 向自身添加存档的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆