Title: Doc: Namespace Packages: Inconsistent documentation of __loader__ being None
Type: enhancement Stage: patch review
Components: Documentation Versions: Python 3.8, Python 3.7
Status: open Resolution:
Dependencies: Superseder:
Assigned To: barry Nosy List: barry, brett.cannon, cheryl.sabella, docs@python, eric.smith, eric.snow, maggyero, mdk, ncoghlan
Priority: normal Keywords: patch

Created on 2018-11-06 22:29 by mdk, last changed 2019-08-09 08:29 by maggyero.

Pull Requests
URL Status Linked Edit
PR 10376 merged maggyero, 2018-11-07 14:43
PR 10016 open maggyero, 2018-11-07 14:47
PR 15190 open maggyero, 2019-08-09 08:29
Messages (6)
msg329392 - (view) Author: Julien Palard (mdk) * (Python committer) Date: 2018-11-06 22:29
The documentation states that a __loader__ of a namespace package should be None:

- [1] "For namespace packages this should be set to None."
- [2] "To indicate to the import machinery that the spec represents a namespace portion. the path entry finder sets “loader” on the spec to None".

But this looks wrong [3], looks like it has been changed in [4]/[5].

I think one should rely on __file__ being None on namespace packages (which make sense as they span over multiple directories) instead of __loader__ being None (a side effect of the import machinery ?).

msg329419 - (view) Author: Géry (maggyero) * Date: 2018-11-07 15:13
It looks like Barry Warsaw has not been fully updated the documentation after making the __spec__.loader attribute match with the __loader__ attribute, and the __spec__.file attribute match with the __file__ attribute for namespace packages.

Here is a pull request to update the library documentation of importlib (your first link [1]) with the current Barry's implementation:

Here is another pull request to update the reference documentation of the import system (your second link [2], but for a different paragraph, as I think the "To indicate to the import machinery that the spec represents a namespace portion the path entry finder sets “loader” on the spec to None" sentence is correct, since the `_bootstrap.ModuleSpec.loader` attribute of a namespace package remains `None` until the call to the `importlib._bootstrap._init_module_attrs` function):
msg339814 - (view) Author: Cheryl Sabella (cheryl.sabella) * (Python committer) Date: 2019-04-09 23:00
@barry, you started a review of PR10016 and I believe all your requested changes have been made, so please review again when you get a chance.  Please also take a look at PR10376.  Thanks!
msg341173 - (view) Author: Barry A. Warsaw (barry) * (Python committer) Date: 2019-05-01 00:56
I've approved both PRs, however I am rather uncomfortable about the code snippet in import.rst.  Géry's change is a good one AFAICT, and thanks for the contribution!  I would feel much better about the long term correctness of this code snippet if we had a doctest to run over it.  But that's for another time.
msg346316 - (view) Author: Géry (maggyero) * Date: 2019-06-23 11:18
@Julien, @Barry

Now that the PRs are merged, I think that we can close this issue.
msg346317 - (view) Author: Géry (maggyero) * Date: 2019-06-23 11:34
Oops, sorry, only one of the two PRs has been merged.
Date User Action Args
2019-08-09 08:29:56maggyerosetpull_requests: + pull_request14922
2019-06-23 11:34:10maggyerosetmessages: + msg346317
2019-06-23 11:18:32maggyerosetmessages: + msg346316
2019-05-01 00:56:00barrysetmessages: + msg341173
2019-04-26 22:57:57brett.cannonsetassignee: docs@python -> barry
2019-04-09 23:00:30cheryl.sabellasetversions: + Python 3.8
nosy: + cheryl.sabella

messages: + msg339814

type: enhancement
2018-11-22 23:55:13maggyerosetnosy: + eric.smith
2018-11-07 15:13:59maggyerosetnosy: + brett.cannon, ncoghlan, eric.snow, maggyero
messages: + msg329419
2018-11-07 14:47:06maggyerosetpull_requests: + pull_request9678
2018-11-07 14:43:39maggyerosetkeywords: + patch
stage: patch review
pull_requests: + pull_request9677
2018-11-06 23:41:53barrysetnosy: + barry
2018-11-06 22:29:09mdkcreate