我在Release dir中有App dir
$cd Release
$tree
.
`-- App
|-- App.exe
..........
我正在尝试在包含所有内容的Release目录中创建App-1.0.zip.那是在解压App-1.0.zip之后,我会得到这个App目录.
我尝试了shutil.make_archive,但是当我这样做时
import shutil
shutil.make_archive('App-1.0', 'zip', '.')
从发布目录中,除了应用程序目录外,我还在App-1.0.zip中获得了48字节的App-1.0.zip.也就是说,它会将未完成的存档添加到自身中.
除了在temp dir中创建档案并移动之外,有什么方法可以避免这种情况?
我试图设置base_dir并使用App作为root_dir
shutil.make_archive('App-1.0', 'zip', '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.
在Win32上的Python 3.6.4(v3.6.4:d48eceb,2017年12月19日,06:04:45)[MSC v.1900 32位(Intel)]
解决方法:
这是几个对我有用的解决方案:
# curdir: Release
shutil.make_archive('App-1.0', 'zip', '.', 'App')
# curdir: ../Release
shutil.make_archive('Release/App-1.0', 'zip', 'Release', 'App')