On 17/07/2013 20:12, Paul Moore wrote:
On 17 July 2013 19:55, Steve Dower <steve.do...@microsoft.com> wrote:
I'm afraid exe files as wrappers are probably the only viable option.
The basic
reason is that the OS recognises exe files in all context, with no
special
configuration needed. This is not true of any other file type. So
anything else
will have corner cases that will give unexpected results.
No reason to be afraid of this, exe wrappers are totally the best option.
As for updating .exes while they're running, the best approach is to
rename the running one (e.g. 'pip.exe' -> 'pip.exe.deleteme') in the same
folder and either:
* delete any existing .deleteme files on next run, or
* delete an existing pip.exe.deleteme file immediately before trying to
rename to it
Any other approach will also have corner cases, but this will be the most
reliable in the context of multiple users/permissions/environment variables.
The problem issue remaining is recognising when we need to do this. In
terms of code paths, pip install -U pip is no different from (for example)
pip install -U flask. But it needs to be handled specially just because
it's pip.
I don't think it does: in essence, any distribution which installs an
.exe wrapper for some entry point can (possibly should) be treated the
same way. Assuming that flask installed some kind of "run-flask.exe" in
scripts/ you'd do the same thing: rename in-place so that the old one
could keep running; write the new one under the old name; delete the old
one (if you can).
The issue of deleting the .deleteme versions of arbitrary scripts is
that you don't know when they might be delete-able. In the Flask
example, assume that someone was actually using run-flask.exe to run a
Flask app, you can rename the .exe but you won't be able to delete it
until it had finished running. Unless you have a watchdog script which
watches the file / folder then you just have to call it .deleteme and
clean up as best you can the next time round.
TJG
_______________________________________________
Distutils-SIG maillist - Distutils-SIG@python.org
http://mail.python.org/mailman/listinfo/distutils-sig