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
答案 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”)。