On Tue, 24 Nov 2020 at 07:47, Christopher Barker <python...@gmail.com> wrote:
> indeed I am. But also, where I need this sort of thing is for desktop GUIs 
> (wxPython in my case), another heavy user of compiled extensions.
>
> I'm still confused what the point is of a zipapp, if it can't be a proper 
> point and click GUI thing, and it can't use any compiled extensions. How it 
> is it better than a console_script and a pip-installed package??

For me (on a purely personal basis) it would allow me to install
command line tools *without* having them tied to a specific Python
installation. So, for example, I can install a tool like tox or nikola
and *not* need to reinstall it every time I upgrade my main Python
installation. (Even if I put it in a virtualenv, or something like
pipx, that's tied to the system Python). I don't (personally) want a
Python interpreter bundled (more accurately, I sometimes do, but not
always). But zipapps fail for me because they aren't exes - and I
regularly trip up over that problem.

To give a very explicit example of what I'm personally thinking of,
imagine writing the "diff" command in Python. How would you deploy it
so that people could use it as easily as a native executable build?
Languages like go and rust are competing in this area, and I'd like to
be able to use Python for this sort of thing.

> Hmm --maybe 'cause you can bundle specific dependency versions?

That's part of it, as well. But I don't often hit version conflicts,
so it's minor.

> In that case, conda-execute should be part of the discussion. What it does is 
> fire up a conda environment, and then run your script in it.

The problem is for me, that I actively dislike conda. If I can set up
conda-execute as a standalone Python application and use it without
knowing it's conda under the hood, then it might be useful. If I
can't, then it's basically demonstrated that it can't bundle *itself*
the way I want it to bundle my code, so I guess that answers my
question as to whether it's useful for me :-)

But that does raise a good point. What I'm looking for is essentially
the equivalent of `cl /Femyapp.exe myapp.c`. A standalone command that
I can run, which creates an executable from my Python code, which I
can copy and run anywhere. I don't mind "needing a Python runtime"
installed on the target, but I *do* mind if it has to be a specific
version (If I write my code on Python 3.8, I want the same exe to run
when I upgrade my PC to 3.9). If I try to describe my personal
checklist of features, it basically comes down to:

* The installer itself must be bundled as a standalone command. I
don't want to have to install the installer into every project's venv.
* An installer that can't bundle itself makes me suspicious. I don't
*actually* insist on "the installer must have created its own
executable", but I'd want to know why if it wasn't...
* The resulting compiled apps must be Windows native exes (I don't
currently have a need for other platforms, but I'd want whatever
"native binary" meant there as well).
* The compiled apps must depend on nothing but a Python interpreter
(and must not be tied to a specific version - only the app's own
constraints should apply there).
* Must be relatively mature/robust - I don't want to interrupt
deploying my script to raise a bug on the installer and wait for a
fix.

Things I'd like to have:

* A mode that *does* use a separately-installed Python interpreter.
Most of the time I don't need the interpreter bundled, and I'd like to
avoid the extra overheads.
* Support for C extensions. Pure python only *is* a real limitation.
* A "robust" mode that doesn't try to strip out "unused stuff". I
don't need this to be the default, but I want it available. I have no
wish to find out months after I deployed the script that a dependency
used some weird dynamic loading feature that the installer didn't know
about, and my app broke because a plugin was missing.
* Related to this, I don't need the installer to guess what packages
I'm using. I'm perfectly willing to tell it. And I definitely don't
want the installer to look at my currently active environment - there
could be all sorts of junk in there.

A tool like PyInstaller is pretty close to this. The major problems
for me are that it doesn't come as a standalone tool, and it has no
"depend on a system Python" mode.

> BTW, this all reminds me of a discussion a long while back in the wxPython 
> community -- we thought it would be nice to have a wxPython run-time -- 
> essentially a Python install with wxPython bundled in, so you could make 
> little GUI apps without bundling that massive package. But one trick was that 
> while wxPython was the big one, any given application might require who knows 
> what other dependency as well. I suppose sipassp could help there.
>
> And none of us got around to actually implementing it anyway :-(

... and that's the main problem with *all* of these ideas. No-one is
actually implementing them. (FWIW, over the weekend I looked at adding
"run an appended zip file" functionality to the Python launcher, and
while it's not too difficult in principle, my C skills, and my
enthusiasm for things like manual memory management and error
handling, have dropped to the point where I really couldn't be
bothered spending my free time on it :-()

Probably because, most of the time it genuinely doesn't matter.
Sharing Python code as scripts, or via `pip install` isn't that bad
for most use cases.

Paul
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/SJTOYUGKDEK6NO3B3BWYZHANIU3VYVZD/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to