From: Ryan Kelly on
On Fri, 2010-02-19 at 11:08 -0800, T wrote:
> On Feb 18, 7:19 pm, Ryan Kelly <r...(a)rfk.id.au> wrote:
> > On Thu, 2010-02-18 at 07:46 -0800, T wrote:
> > > I have a Python app which I converted to an EXE (all files separate;
> > > single EXE didn't work properly) via py2exe - I plan on distributing
> > > this and would like the ability to remotely upgrade the program (for
> > > example, via HTTP/HTTPS). Looks like it's not just the EXE that I
> > > will need need to replace (DLLs, the library.zip, etc.). What would
> > > be the best way to go about doing this?
> >
> > I've been working on an auto-update framework for my own frozen apps,
> > you might find it useful:
> >
> > http://pypi.python.org/pypi/esky
> >
> > Docs are a little scarce at the moment, the next release will hopefully
> > come with a short tutorial (as well as support for cx_freeze and maybe
> > py2app, depending on how adventurous I'm feeling).
> >
> Thanks Ryan..this looks like it could be what I'm looking for, but I'm
> still a bit unsure of how exactly how it works. Do you happen to have
> an idea approx when the next release w/ tutorial will be out?


If I punt on the py2app support, I should be able to get it done in the
next 3-4 days. I'll send a quick email to python-list when it's ready.

Here's a rough roadmap of where the project is heading:

v0.4.0: cx_freeze support and a tutorial [the next 3-4 days]
v0.4.1: py2app support [the next 2-3 weeks]
v0.5.0: differential updates using bsdiff [next few months]


Cheers,

Ryan



--
Ryan Kelly
http://www.rfk.id.au | This message is digitally signed. Please visit
ryan(a)rfk.id.au | http://www.rfk.id.au/ramblings/gpg/ for details

From: CM on
On Feb 19, 4:28 pm, Ryan Kelly <r...(a)rfk.id.au> wrote:
> On Thu, 2010-02-18 at 20:32 -0800, CM wrote:
> > On Feb 18, 7:19 pm, Ryan Kelly <r...(a)rfk.id.au> wrote:
> > > On Thu, 2010-02-18 at 07:46 -0800, T wrote:
> > > > I have a Python app which I converted to an EXE (all files separate;
> > > > single EXE didn't work properly) via py2exe - I plan on distributing
> > > > this and would like the ability to remotely upgrade the program (for
> > > > example, via HTTP/HTTPS).   Looks like it's not just the EXE that I
> > > > will need need to replace (DLLs, the library.zip, etc.).  What would
> > > > be the best way to go about doing this?
>
> > > I've been working on an auto-update framework for my own frozen apps,
> > > you might find it useful:
>
> > >  http://pypi.python.org/pypi/esky
>
> > This looks pretty interesting and useful.
>
> Thanks :-)
>
> > Just to help me understand it a bit more:  what is it that users will
> > download from some web page in order to initially get the py2exe'd app
> > on their system?  Is it "really" an "esky", with the app's .exe file
> > inside it (but the esky is named the same as the app)?
>
> Currently, it's just a zip file with the frozen app in it, which the
> user unzips to wherever they want the app.  When unzipped it looks like
> this:
>
>    myapp.exe  <-- actually the esky bootstrap exe
>    myapp-X.Y.Z.win32/
>        myapp.exe  <-- the actual frozen app as produced by py2exe
>        python26.dll
>        ...etc...
>
> This could easily be wrapped in an installer - the important thing is
> just that the files end up on the user's machine in the expected
> directory structure.
>
> >   And then when
> > they want to update, the app's code calls the esky class to do the
> > work of swapping out the appropriate .exe file?  Something like this?
>
> Yes.  The idea of having a "bootstrapping exe" is that actual
> application code can be swapped out without having to overwrite the
> executable file.  As long as you don't change python versions, this
> allows updates to be safe against system crashes, even on platforms
> without atomic file replacement.
>
> So the frozen app does this in a background thread:
>
>    Esky(sys.executable,"http://my.updates.com").auto_update()
>
> And it hits the given url, grabs the latest zipfile, downloads and
> unpacks and atomically places it into the application directory.  Et
> viola, your app is at the latest version.
>
> From the packager's point of view, you run the "bdist_esky" distutils
> command to generate the zipfile containing your latest version, then
> simply upload it to your server.
>
> > Would this also work if one used InnoSetup to install the exe on the
> > user's system?
>
> Yes, absolutely - in fact I plan to do this myself at some stage.  All
> that's required is that the files end up in the expected directory
> structure.
>
>    Ryan

Wow, it sounds great. Good luck with moving forward with it. I'm not
quite ready to release any apps, but as (if?) I come up on that, and
if I plan on updating them, I would love to make use of Esky. Thanks
for doing this. :D

Che
From: T on
On Feb 19, 4:32 pm, Ryan Kelly <r...(a)rfk.id.au> wrote:
> On Fri, 2010-02-19 at 11:08 -0800, T wrote:
> > On Feb 18, 7:19 pm, Ryan Kelly <r...(a)rfk.id.au> wrote:
> > > On Thu, 2010-02-18 at 07:46 -0800, T wrote:
> > > > I have a Python app which I converted to an EXE (all files separate;
> > > > single EXE didn't work properly) via py2exe - I plan on distributing
> > > > this and would like the ability to remotely upgrade the program (for
> > > > example, via HTTP/HTTPS).   Looks like it's not just the EXE that I
> > > > will need need to replace (DLLs, the library.zip, etc.).  What would
> > > > be the best way to go about doing this?
>
> > > I've been working on an auto-update framework for my own frozen apps,
> > > you might find it useful:
>
> > >  http://pypi.python.org/pypi/esky
>
> > > Docs are a little scarce at the moment, the next release will hopefully
> > > come with a short tutorial (as well as support for cx_freeze and maybe
> > > py2app, depending on how adventurous I'm feeling).
>
> > Thanks Ryan..this looks like it could be what I'm looking for, but I'm
> > still a bit unsure of how exactly how it works.  Do you happen to have
> > an idea approx when the next release w/ tutorial will be out?
>
> If I punt on the py2app support, I should be able to get it done in the
> next 3-4 days.  I'll send a quick email to python-list when it's ready.
>
> Here's a rough roadmap of where the project is heading:
>
>   v0.4.0:  cx_freeze support and a tutorial [the next 3-4 days]
>   v0.4.1:  py2app support [the next 2-3 weeks]
>   v0.5.0:  differential updates using bsdiff [next few months]
>
>   Cheers,
>
>      Ryan
>
> --
> Ryan Kellyhttp://www.rfk.id.au |  This message is digitally signed. Please visit
> r...(a)rfk.id.au        |  http://www.rfk.id.au/ramblings/gpg/for details
>
>  signature.asc
> < 1KViewDownload

Excellent - I look forward to giving it a try. Thanks again!
From: Aahz on
In article <mailman.2807.1266614926.28905.python-list(a)python.org>,
Ryan Kelly <ryan(a)rfk.id.au> wrote:
>
>Yes. The idea of having a "bootstrapping exe" is that actual
>application code can be swapped out without having to overwrite the
>executable file. As long as you don't change python versions, this
>allows updates to be safe against system crashes, even on platforms
>without atomic file replacement.
>
>So the frozen app does this in a background thread:
>
> Esky(sys.executable,"http://my.updates.com").auto_update()
>
>And it hits the given url, grabs the latest zipfile, downloads and
>unpacks and atomically places it into the application directory. Et
>viola, your app is at the latest version.

How does this work with a running app? What if the app is a service?
--
Aahz (aahz(a)pythoncraft.com) <*> http://www.pythoncraft.com/

"Many customs in this life persist because they ease friction and promote
productivity as a result of universal agreement, and whether they are
precisely the optimal choices is much less important." --Henry Spencer
From: Ryan Kelly on
On Wed, 2010-02-24 at 15:05 -0800, Aahz wrote:
> In article <mailman.2807.1266614926.28905.python-list(a)python.org>,
> Ryan Kelly <ryan(a)rfk.id.au> wrote:
> >
> >Yes. The idea of having a "bootstrapping exe" is that actual
> >application code can be swapped out without having to overwrite the
> >executable file. As long as you don't change python versions, this
> >allows updates to be safe against system crashes, even on platforms
> >without atomic file replacement.
> >
> >So the frozen app does this in a background thread:
> >
> > Esky(sys.executable,"http://my.updates.com").auto_update()
> >
> >And it hits the given url, grabs the latest zipfile, downloads and
> >unpacks and atomically places it into the application directory. Et
> >viola, your app is at the latest version.
>
> How does this work with a running app? What if the app is a service?

The changes will only take effect the next time the app is started -
currently there's no support for "hot upgrading" a running app.

Would definitely be an interesting feature though...


Ryan

--
Ryan Kelly
http://www.rfk.id.au | This message is digitally signed. Please visit
ryan(a)rfk.id.au | http://www.rfk.id.au/ramblings/gpg/ for details