PEP 499: Delegate to Nick Coghlan (#946)
Also updates the PEP with links to the reference implementation, and adds an Open Questions section to highlight known areas of compatibility risk.
This commit is contained in:
parent
15f60095ab
commit
e491484ce8
46
pep-0499.txt
46
pep-0499.txt
|
@ -3,6 +3,7 @@ Title: ``python -m foo`` should bind ``sys.modules['foo']`` in addition to ``sys
|
||||||
Version: $Revision$
|
Version: $Revision$
|
||||||
Last-Modified: $Date$
|
Last-Modified: $Date$
|
||||||
Author: Cameron Simpson <cs@cskk.id.au>, Chris Angelico <rosuav@gmail.com>, Joseph Jevnik <joejev@gmail.com>
|
Author: Cameron Simpson <cs@cskk.id.au>, Chris Angelico <rosuav@gmail.com>, Joseph Jevnik <joejev@gmail.com>
|
||||||
|
BDFL-Delegate: Nick Coghlan
|
||||||
Status: Draft
|
Status: Draft
|
||||||
Type: Standards Track
|
Type: Standards Track
|
||||||
Content-Type: text/x-rst
|
Content-Type: text/x-rst
|
||||||
|
@ -152,6 +153,51 @@ where ``__name__`` is expected to be "__main__".
|
||||||
This PEP explicitly preserves that semantic.
|
This PEP explicitly preserves that semantic.
|
||||||
|
|
||||||
|
|
||||||
|
Reference Implementation
|
||||||
|
========================
|
||||||
|
|
||||||
|
`BPO 36375 <https://bugs.python.org/issue36375>`_ is the issue tracker entry
|
||||||
|
for the PEP's reference implementation, with the current draft PR being
|
||||||
|
available `on GitHub <https://github.com/python/cpython/pull/12490>`_.
|
||||||
|
|
||||||
|
|
||||||
|
Open Questions
|
||||||
|
==============
|
||||||
|
|
||||||
|
This proposal does raise some backwards compatibility concerns, and these will
|
||||||
|
need to be well understood, and either a deprecation process designed, or clear
|
||||||
|
porting guidelines provided.
|
||||||
|
|
||||||
|
Pickle compatibility
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
If no changes are made to the pickle module, then pickles that were previously
|
||||||
|
being written with the correct module name (due to a dual import) may start
|
||||||
|
being written with `__main__` as their module name instead, and hence fail to be
|
||||||
|
loaded correctly by other projects.
|
||||||
|
|
||||||
|
Scenarios to be checked:
|
||||||
|
|
||||||
|
* `python script.py` writing, `python -m script` reading
|
||||||
|
* `python -m script` writing, `python script.py` reading
|
||||||
|
* `python -m script` writing, `python some_other_app.py` reading
|
||||||
|
* `old_python -m script` writing, `new_python -m script` reading
|
||||||
|
* `new_python -m script` writing, `old_python -m script` reading
|
||||||
|
|
||||||
|
|
||||||
|
Projects that special-case `__main__`
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
In order to get the regression test suite to pass, the current reference
|
||||||
|
implementation had to patch `pdb` to avoid destroying its own global namespace.
|
||||||
|
|
||||||
|
This suggests there may be a broader compatibility issue where some scripts are
|
||||||
|
relying on direct execution and import giving different namespaces (just as
|
||||||
|
package execution keeps the two separate by executing the `__main__` submodule
|
||||||
|
in the `__main__` namespace, while the package name references the `__init__`
|
||||||
|
file as usual.
|
||||||
|
|
||||||
|
|
||||||
Background
|
Background
|
||||||
==========
|
==========
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue