On 22/01/2013 14:53, Terry Reedy wrote: > On 1/22/2013 4:24 AM, Tim Golden wrote: >> [Python 2.7/3.3 (and hg tip) running on Windows. Not Windows-specific, >> though]. >> >> I use the python -mpackage incantation to run a package which has a >> __main__.py module and which uses relative imports internally. >> >> I'm developing under cherrypy which includes a reloader for development. >> The reloader attempts to rebuild the original >> command line by combining sys.executable and sys.argv and then does an >> execv. >> >> There does not appear to be any way within Python of determining the >> command line I used. The combination of sys.executable and sys.argv in >> this case will look like: "c:\python33\python.exe app/__main__.py". But >> running this precludes the use of package-relative imports. > > If I understand right, the reloader should be updated to translate > 'x/__main__.py' to '-m x'. Filenames of form'__x__' are reserved, in a > sense, like similar identifiers in programs, and '__main__.py' should > not be used for a file meant to executed directly.
To be clear: it's Python itself, not the reloader, which is coming up with __main__.py. sys.executable is "c:\python33\python.exe" and sys.argv is ['c:\path\to\__main__.py'] for a program which has been started by "c:\python33\python.exe -mpath\to". Obviously, there is any number of ways around this specific issue, including what you suggest: a canonical rewrite of "python path\to\__main__.py" into "python -mpath\to". But it's not clear to me that this rewrite should be the responsibility of calling code. TJG -- http://mail.python.org/mailman/listinfo/python-list