Как мне создать zip-архив структуры каталогов в Python?
В скрипте Python
В Python 2.7+ shutil
имеет функцию make_archive
.
from shutil import make_archive
make_archive(
'zipfile_name',
'zip', # the archive format - or tar, bztar, gztar
root_dir=None, # root for archive - current working dir if None
base_dir=None) # start archiving from here - cwd if None too
Здесь заархивированный архив будет называться zipfile_name.zip
. Если base_dir
дальше от root_dir
, это исключит файлы, не входящие в base_dir
, но все же заархивирует файлы в родительских каталогах до root_dir
.
У меня была проблема с проверкой этого на Cygwin с 2.7 - ему нужен аргумент root_dir, для cwd:
make_archive('zipfile_name', 'zip', root_dir='.')
Использование Python из оболочки
Вы можете сделать это с помощью Python из оболочки, также используя модуль zipfile
:
$ python -m zipfile -c zipname sourcedir
Где zipname
- это имя файла назначения, который вы хотите (добавьте .zip
, если вы хотите, он не будет делать это автоматически), а sourcedir - это путь к каталогу.
Архивирование Python (или просто не хочу родительский каталог):
Если вы пытаетесь заархивировать пакет python с __init__.py
и __main__.py
, и вам не нужен родительский каталог, это
$ python -m zipfile -c zipname sourcedir/*
И
$ python zipname
запустит пакет. (Обратите внимание, что вы не можете запускать подпакеты в качестве точки входа из архива.)
Архивирование приложения Python:
Если у вас есть python3.5 +, и вы хотите заархивировать пакет Python, используйте zipapp :
$ python -m zipapp myapp
$ python myapp.pyz