# Test data for `test_zipfile`

The test executables in this directory are created manually from header.sh and
the `testdata_module_inside_zip.py` file.  You must have infozip's zip utility
installed (`apt install zip` on Debian).

## Purpose

These are used to test executable files with an appended zipfile, in a scenario
where the executable is _not_ a Python interpreter itself so our automatic
zipimport machinery (that'd look for `__main__.py`) is not being used.

## Updating the test executables

If you update header.sh or the testdata_module_inside_zip.py file, rerun the
commands below.  These are expected to be rarely changed, if ever.

### Standard old format (2.0) zip file

```
zip -0 zip2.zip testdata_module_inside_zip.py
cat header.sh zip2.zip >exe_with_zip
rm zip2.zip
```

### Modern format (4.5) zip64 file

Redirecting from stdin forces infozip's zip tool to create a zip64.

```
zip -0 <testdata_module_inside_zip.py >zip64.zip
cat header.sh zip64.zip >exe_with_z64
rm zip64.zip
```

