Как создать 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
Здесь zipped архив будет называться
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