On Fri, Jan 10, 2020 at 11:06:25PM -0800, Andrew Barnert wrote:
> On Jan 10, 2020, at 20:40, Steven D'Aprano <st...@pearwood.info> wrote:

[...]
> > Have I missed some subtlety in your proposal?
> 
> Well, there are definitely subtle differences. 

I'm sure there are, but it isn't clear to me that the proposed 
enhancement has anything to do with the differences you mention.


> If it’s a single file rather than a package, running it as a script 
> means you have to include the extension; with -m you can’t. 

Well, sure, but when running as a script you are specifying a location, 
and if you leave the extension off (assuming the script has one, which 
it may not) then you are specifying a different, and probably 
non-existing, location.

When using -m, you are telling Python to search for and run the named 
module, and you have to use the same rules for legal module names as you 
have to use inside the interpreter. And that means no extensions:

    import math  # not math.dll

I'm not concerned that the signatures are different:

    python pathname   # run the entity specified by the pathname
    python -m module  # run the module specified by the identifier

but whether between those two mechanisms (pick one or the other) it 
solves Soni's issue. I think they might.

Soni suggested that you can't run a submodule in a package unless you cd 
into the package, but I think that's wrong. I think that between the two 
mechanisms for calling modules/packages/submodules, and the 
"__main__.py" entry point to packages, this should cover pretty much all 
the obvious use-cases for calling Python modules from the command line.

(Modulo any potential bugs in the implementation.)

I'm not worried about all the methods using precisely the same 
interface, nor am I worried about subtle differences in the way the 
various special variables argv[0], `__file__` etc are filled in.

(Those differences can be used by scripts/modules etc to identify how 
they are called, in case they care.)

If Soni is worried about those things, they should say so, but I suspect 
that they merely don't know about the `__main__.py` entry point. Or 
perhaps I have completely misunderstood their proposal and I'm talking 
nonsense.


> Wouldn’t it be simpler to just use a separate arg to add a path to the 
> sys.path, or to cd to

Or we can learn to use your shell effectively. Does Python need to 
offer equivalent ways of doing everything the OS shell provides? I hope 
not :-)

In POSIX systems you can just set the PYTHONPATH for a single 
invocation of the interpreter:

    PYTHONPATH="/tmp" python whatever

As for the "cd to" option, you can get that with parentheses:

[steve@ando tmp]$ pwd
/tmp
[steve@ando tmp]$ (cd /; python3.5 -c "import os; print(os.getcwd())")
/
[steve@ando tmp]$

I assume Windows has equivalent features to the above. If not, then 
perhaps we ought to consider what you say, but otherwise, let's not 
duplicate shell features in the interpreter if we don't have a good 
reason to do so.


-- 
Steven
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/QYRD753HKVFCDQCPY3DRBONSCR5FZDVL/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to