On Tue Feb 24 2015 at 3:21:30 PM Paul Moore <p.f.moore@gmail.com> wrote:
On 24 February 2015 at 18:58, Guido van Rossum <guido@python.org> wrote:
> Why no command-line equivalent for the other two methods?  I propose the
> following interface: if there's only one positional argument, we're asking
> to print its shebang line; if there are two and the input position is an
> archive instead of a directory, we're copying.  (In the future people will
> want an option to print more stuff, e.g. the main function or even a full
> listing.)

Thinking about this, there are 3 main uses:

1. Create an archive
2. Print the shebang
3. Change the shebang

Of these, (1) is the crucial one.

Basic usage should be

    python -m zipapp mydir [-o anothername.pyz] [-p interpreter] [-m
entry:point]

This zips up mydir to create an archive mydir.pyz. Options to change
the target name, set a shebang line (side note: --python/-p or
--interpreter/-i?) and set the entry point,

I see this as pretty non-negotiable, this is the key use case that
needs to be as simple as possible.

To print the shebang, we could use

    python -m zipapp myapp.pyz --show

This allows for future expansion by adding options, although most
other things you might want to do (list the files, display
__main__.py) can be done with a standard zip utility. I'm not keen on
the option name --show, but I can't think of anything substantially
better.

To modify an archive could be done using

    python -m zipapp old.pyz new.pyz [-p interpreter]

Default is to strip the shebang (no -p option). There's no option to
omit the target and do an inplace update because I feel the default
action (strip the shebang from the existing file with no backup) is
too dangerous.

To be explicit, "python -m zipapp app.pyz" will fail with a message
"In-place editing of python zip applications is not supported".

That seems to work.

Open questions:

1. To create an archive, use -o target for an explicit target name, or
just "target". The former is more conventional, the latter consistent
with modification. Or we could make modification use a (mandatory) -o
option.

EIBTI suggests requiring the -o. Pragmatic suggests just [in] [out] and use context based on what kind of thing [in] points at as well as whether -p is specified and whether it has an argument, which is the most minimal UX you can have. Question is whether you can screw up by specifying the wrong thing somehow (you might have to require that [out] doesn't already exist to make it work).
 
2. -p/--python or -i/--interpreter for the shebang setting option

Since you are going to be using `python -m pyzip` then -i/--interpreter is less redundant-looking on the command-line.
 
3. What to call the "show the shebang line" option

As suggested above, -p w/o an argument could do it, otherwise --show or --info seems fine (I like --shebang, but that will probably be tough on non-English speakers).