Ale*_* P. 5 python archive shutil python-3.x
我在Appdir 里面有Releasedir
$ cd Release
$ tree
.
`-- App
|-- App.exe
..........
Run Code Online (Sandbox Code Playgroud)
我试图App-1.0.zip在Release包含App所有内容的目录中创建。那是在解包之后App-1.0.zip我会得到这个App目录。
我试过了,shutil.make_archive但是当我这样做时
import shutil
shutil.make_archive('App-1.0', 'zip', '.')
Run Code Online (Sandbox Code Playgroud)
从Release目录,我得到48字节App-1.0.zip内App-1.0.zip除了App目录。也就是说,它将这个未完成的档案添加到自己身上。
除了在临时目录中创建存档并移动之外,有没有办法避免这种情况?
我试图设置base_dir和使用App作为root_dir
shutil.make_archive('App-1.0', 'zip', 'App', 'App')
Run Code Online (Sandbox Code Playgroud)
但是我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'"
Run Code Online (Sandbox Code Playgroud)
同为'/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
以下是一些对我有用的解决方案:
# curdir: Release
shutil.make_archive('App-1.0', 'zip', '.', 'App')
# curdir: ../Release
shutil.make_archive('Release/App-1.0', 'zip', 'Release', 'App')
Run Code Online (Sandbox Code Playgroud)