def make_zip_archive(self,<EOL>dst=None,<EOL>filters=all_true,<EOL>compress=True,<EOL>overwrite=False,<EOL>makedirs=False,<EOL>verbose=False):  
self.assert_exists()<EOL>if dst is None:<EOL><INDENT>dst = self._auto_zip_archive_dst()<EOL><DEDENT>else:<EOL><INDENT>dst = self.change(new_abspath=dst)<EOL><DEDENT>if not dst.basename.lower().endswith("<STR_LIT>"):<EOL><INDENT>raise ValueError("<STR_LIT>")<EOL><DEDENT>if dst.exists():<EOL><INDENT>if not overwrite:<EOL><INDENT>raise IOError("<STR_LIT>" % dst)<EOL><DEDENT><DEDENT>if compress:<EOL><INDENT>compression = ZIP_DEFLATED<EOL><DEDENT>else:<EOL><INDENT>compression = ZIP_STORED<EOL><DEDENT>if not dst.parent.exists():<EOL><INDENT>if makedirs:<EOL><INDENT>os.makedirs(dst.parent.abspath)<EOL><DEDENT><DEDENT>if verbose:<EOL><INDENT>msg = "<STR_LIT>" % self<EOL>print(msg)<EOL><DEDENT>current_dir = os.getcwd()<EOL>if self.is_dir():<EOL><INDENT>total_size = <NUM_LIT:0><EOL>selected = list()<EOL>for p in self.glob("<STR_LIT>"):<EOL><INDENT>if filters(p):<EOL><INDENT>selected.append(p)<EOL>total_size += p.size<EOL><DEDENT><DEDENT>if verbose:<EOL><INDENT>msg = "<STR_LIT>".format(<EOL>len(selected), repr_data_size(total_size),<EOL>)<EOL>print(msg)<EOL><DEDENT>with ZipFile(dst.abspath, "<STR_LIT:w>", compression) as f:<EOL><INDENT>os.chdir(self.abspath)<EOL>for p in selected:<EOL><INDENT>relpath = p.relative_to(self).__str__()<EOL>f.write(relpath)<EOL><DEDENT><DEDENT><DEDENT>elif self.is_file():<EOL><INDENT>with ZipFile(dst.abspath, "<STR_LIT:w>", compression) as f:<EOL><INDENT>os.chdir(self.parent.abspath)<EOL>f.write(self.basename)<EOL><DEDENT><DEDENT>os.chdir(current_dir)<EOL>if verbose:<EOL><INDENT>msg = "<STR_LIT>".format(dst.size_in_text)<EOL>print(msg)<EOL><DEDENT>
Make a zip archive.

:param dst: output file path. if not given, will be automatically assigned.
:param filters: custom path filter. By default it allows any file.
:param compress: compress or not.
:param overwrite: overwrite exists or not.
:param verbose: display log or not.
:return: