Géry <gery.o...@gmail.com> added the comment:

Thanks for your extended review Steven.

> You state that these two phrases are from the runpy documentation:
>
> * "run from the module namespace"
> * "run from the file system"
>
> but neither of those phrases appear in the runpy documentation here:
>
> https://docs.python.org/3/library/runpy.html

I agree. Actually the first paragraph of the page uses the phrases:

- "located using the module namespace";
- "located using the file system",

so instead of saying:

- "run a module located using the module namespace" to mean "python <file>
- "run a module located using the file system" to mean "python -m <module>",

I simplified to:

- "run from the module namespace"
- "run from the file system"

But since the terminology is misleading I have used these phrases instead:

- `python`: "module initialized from an interactive prompt";
- `python < <file>`: "module initialized from standard input";
- `python <file>`: "module initialized from a file argument";
- `python -c <code>`: "module initialized from a `-c` argument";
- `python -m <module>`: "module initialized from a `-m` argument";
- `import <module>`: "module initialized from an import statement".

What the documentation tries to explain is that in all of these cases except 
the last one, code is executed in the __main__ module.

I have updated the PR.

----

> The PR changes the term "scope" to "environment", but I think that is wrong. 
> An environment is potentially greater than a scope. `__main__` is a module 
> namespace, hence a scope. The environment includes things outside of that 
> scope, such as the builtins, environment variables, the current working 
> directory, the python path, etc. We don't talk about modules being an 
> environment, but as making up a scope.

I disagree. According to Wikipedia 
(https://en.wikipedia.org/wiki/Scope_(computer_science)), the term "scope" is 
the part of a program where a name binding is valid, while the term 
"environment" (synonym of "context") is the set of name bindings that are valid 
within a part of a program. Therefore "scope" is a property of a name binding 
(a name binding has a scope), and "environment" is a property of a part of a 
program (a part of a program has an environment).

And the term "environment" is actually already used in the original title and 
synopsis of the document (and it is correct):

> :mod:`__main__` --- Top-level script environment

> .. module:: __main__
>     :synopsis: The environment where the top-level script is run.

So my change to the body fixes the inconsistent and incorrect usage of "scope":

- ``'__main__'`` is the name of the scope in which top-level code executes.
+ ``'__main__'`` is the name of the environment where top-level code is run.

- A module can discover whether or not it is running in the main scope
+ A module can discover whether or not it is running in the main environment

----

> Placing the comment above the `if`, where it will apply to the entire `if` 
> statement, is incorrect.

I agree. Sometimes you see comments before if statements but they usually don't 
start with "execute".

I have updated the PR.

----

> The second problem is that when running a module with -m it *is* imported. 
> PEP 338 is clear about this:

I agree. I should have said "when the module is not initialized from an import 
statement".

But note that even before my change the original document already used the 
phrase "not imported":

- executing code in a module when it is run as a script or with ``python
- -m`` but not when it is imported::
+ executing code in a module when it is not imported::

- # execute only if run as a script
+ # Execute only if the module is not imported.

I have updated the PR.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue39452>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to