[Distutils] Re: Add multiple frozen modules

Christian Tismer tismer@appliedbiometrics.com
Wed, 14 Jul 1999 16:10:57 +0200


"James C. Ahlstrom" wrote:
> 
> Gordon McMillan wrote:
> 
> > OK - os.path.dirname(sys.argv[0]).
> 
> Oh, I see.  Your main program is given as a complete path
> in the icon target.  So "python D:/my/path/myprog.py".
> I start my main as the frozen module named "__main__", so
> sys.argv[0] is useless.

Freezing is not so handy as Gordon's trick. Which came partially
out of my trick, which came from Fredrik's squeeze trick, or so.

[the trick]

> Cool.  I didn't realize you could append to an .exe and still
> have it run.  How do you know where your appended data starts?

Is it still so? look at the end for the magic cookie, use its
info to find the start of a cookie, and there's the data?

> > More advanced would be to make the archive a legit resource section
> > of the exe, but I can't see that as worth the effort (esp. since I
> > don't expect my users to have compilers, and I've already gone to the
> > work of finding the import sections in dll headers so I can find
> > binary dependencies...)
> 
> I think this may be a good idea.  We could use a Windows user-defined
> resource named with a magic name such as "PythonPyc", and all resource
> modules could be loaded in Py_Initialize().  The .rc resource file
> names the .pyc file so there is no need to convert the bytes to C
> and compile.  The .rc file syntax is the line:
>                string PythonPyc C:/lib/string.pyc
> You use FindResource(), SizeofResource(), LoadResource() and
> LockResource() to access these resources.

Yes, this is still an open issue. Greg proposed a similar way.
I never came to it, since the drawback of the simple approach
is that it works, and it isn't so obvious how. By a resource,
I open the app to Joe Hacker and invite him to play with
resources. So why should I, if everything can be done in
a copy /b style? :-)

> It is possible to replace resources in an exe or dll using
> BeginUpdateResource(), UpdateResource() and EndUpdateResource().  If
> we wrote a Python interface into a .pyd, then users don't even need
> a compiler nor resource compiler.  Note that there is Mac code in the
> distribution which accesses Mac resources.  The only reason I have
> not written all this is it is not usable on Unix.

Yes, and to complete it: The append trick *does* work on Unix.
And a resource like management of things could be written
with Python, defining our own resources. Why care about an OS?

Ahem :-) ciao - chris

-- 
Christian Tismer             :^)   <mailto:tismer@appliedbiometrics.com>
Applied Biometrics GmbH      :     Have a break! Take a ride on Python's
Kaiserin-Augusta-Allee 101   :    *Starship* http://starship.python.net
10553 Berlin                 :     PGP key -> http://wwwkeys.pgp.net
PGP Fingerprint       E182 71C7 1A9D 66E9 9D15  D3CC D4D7 93E2 1FAE F6DF
     we're tired of banana software - shipped green, ripens at home