crossplatform py2exe - would it be useful?
Alex Martelli
aleax at aleax.it
Thu Aug 7 14:29:44 EDT 2003
Thomas Heller wrote:
> Alex Martelli <aleax at aleax.it> writes:
>
>> Thomas Heller wrote:
>> ...
>>>>> myscript -c "import sys; sys.path.insert(0, sys.executable); import
>>>>> foo"
>> ...
>>>> Sounds like a good idea to me, if a sensible name is chosen for the
>>>> "main module" (I propose 'main':-).
>>>
>>> My choice would have been __main__ :-) Is it really the correct way to
>>> 'import __main__' instead of 'running' it?
>>
>> Well, most main scripts ARE coded with the "if __name__=='__main__':"
>> convention, after all, so an "import __main__" can be seen as a way
>> to just piggyback on that existing convention rather than inventing a
>> new one in addition. So, I concede it's better than "import main".
>>
>
> How would the hook be triggered? The zipimporter code would probably add
> argv[0] to sys.path, and then try to 'import __main__' or something like
> this. The problem is that a standalone executable python would have to
> disable the standard Python command line flags and environment
> variables, but they are parse *before* Py_Initialize() is called.
Ah, yes, good point. So, the executable needs to know whether to do
the usual commandline and environment processing, or not, _before_
calling Py_Inizialize. One approach might be to trigger this based
on the executable's own *name* -- do the full commandline and environment
processing if and only if the executable's name starts with (case-
insensitive, probably, to be safe...) the six letters 'python', but
not otherwise. There are, no doubt, other alternative ways, too, but
this one seems dirt-simple and practically sufficient.
> And I hope that the options set by the command line flags and env vars
> should now come from the __main__ script itself.
I'm not sure I understand what you mean. Anyway, I do see that if
my 'foobar.exe' is a python.exe + appended zipfile, then running
'foobar -i' should just put '-i' in sys.argv[1], and NOT gobble it up
to mean "enter interactive mode", for example.
Alex
More information about the Python-list
mailing list