Gallian Colombeau wrote on 8/27/18 06:49:

As I understand, for a package to allow being extended in this way, it must be a namespace package and not contain a marker file. As a matter of fact, no sub-package until the top level package can have a marker file:

No, that's not true.

However, what is not discussed is "implicit namespace sub-package". In

There really is no such thing. Packages are either PEP 420 style namespace packages, or regular packages. The latter contain __init__.py files.

The language reference goes into quite a bit of detail on the matter.

https://docs.python.org/3/reference/import.html#packages

Python 3.6 (I guess since the first implementation), if you have this layout:
Lib/test/namespace_pkgs
     project1
         parent # Regular package
             __init__.py
             child # Namespace package
                 one.py

you get "parent" as a regular package and "parent.child" as a namespace package and it works (although now, every package data directory became namespace packages and are importable, which may or may not be desirable). The point is, does that add any value?

Personally, I don't think so. You can do it, but it's not the intended purpose, so you're on your own.

I wasn't able to find any discussion about this and, as far as I can see, there is actually no use case for this as there is no possible way to contribute to the "parent.child" namespace. Is that an intended behavior of PEP 420?

There can be use cases for subpackage namespace packages, although they are definitely more rare than top-level namespace packages. One possibility would be a plugin system, say for application 'foo', where they reserve a subpackage for separate-distribution plugins, E.g. foo.plugins.ext where foo/plugins/ext has no __init__.py file.

Wouldn't it be more appropriate to enforce a sub-package to be a regular package if the parent package is a regular package?

As Brett says, it's probably way too late to change this.

-Barry

_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to