停止 shutil.make_archive 向自身添加存档
Stop shutil.make_archive adding archive to itself
我有 App
目录 Release
目录
$ cd Release
$ tree
.
`-- App
|-- App.exe
..........
我正在尝试在包含 App
的 Release
目录中创建 App-1.0.zip
及其所有内容。那是在解包后 App-1.0.zip
我会得到这个 App
目录。
我试过 shutil.make_archive
但是当我这样做时
import shutil
shutil.make_archive('App-1.0', 'zip', '.')
从 Release
目录,除了 App
目录外,我在 App-1.0.zip
中得到 48 字节 App-1.0.zip
。那就是它将这个未完成的存档添加到自身。
除了在临时目录中创建存档并移动之外,还有什么方法可以避免这种情况吗?
我尝试设置 base_dir
并将 App
用作 root_dir
shutil.make_archive('App-1.0', 'zip', 'App', 'App')
但是当我设置 base_dir
时我得到错误提示 App
没有找到。
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
这里有几个对我有用的解决方案:
# 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('App-1.0', 'zip', '.', 'App')
虽然 'App-1.0' 在技术上是 "filename",但它必须表示为不带扩展名 ('c:\myfiles\myzipfile') 的文件路径。我还没有玩过路径名的所有变体,所以一些快捷方式可能有效(例如:'Release/App-1.0')。
我有 App
目录 Release
目录
$ cd Release
$ tree
.
`-- App
|-- App.exe
..........
我正在尝试在包含 App
的 Release
目录中创建 App-1.0.zip
及其所有内容。那是在解包后 App-1.0.zip
我会得到这个 App
目录。
我试过 shutil.make_archive
但是当我这样做时
import shutil
shutil.make_archive('App-1.0', 'zip', '.')
从 Release
目录,除了 App
目录外,我在 App-1.0.zip
中得到 48 字节 App-1.0.zip
。那就是它将这个未完成的存档添加到自身。
除了在临时目录中创建存档并移动之外,还有什么方法可以避免这种情况吗?
我尝试设置 base_dir
并将 App
用作 root_dir
shutil.make_archive('App-1.0', 'zip', 'App', 'App')
但是当我设置 base_dir
时我得到错误提示 App
没有找到。
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
这里有几个对我有用的解决方案:
# 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('App-1.0', 'zip', '.', 'App')
虽然 'App-1.0' 在技术上是 "filename",但它必须表示为不带扩展名 ('c:\myfiles\myzipfile') 的文件路径。我还没有玩过路径名的所有变体,所以一些快捷方式可能有效(例如:'Release/App-1.0')。