Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Doc: update term "namespace package" #129251

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

methane
Copy link
Member

@methane methane commented Jan 24, 2025

Recommend using regular package officially to avoid people just think __init__.py is not necessary.

For example: https://stackoverflow.com/questions/448271/what-is-init-py-for


📚 Documentation preview 📚: https://cpython-previews--129251.org.readthedocs.build/

Recommend using regular package officially to avoid
people just think `__init__.py` is not necessary.
@methane methane added the docs Documentation in the Doc dir label Jan 24, 2025
@methane
Copy link
Member Author

methane commented Jan 24, 2025

Another example of namespace pacakge being misunderstood.
#81073 (comment)

@methane methane requested a review from ericvsmith January 24, 2025 06:02
Doc/glossary.rst Show resolved Hide resolved
Doc/glossary.rst Outdated Show resolved Hide resolved
Doc/glossary.rst Outdated Show resolved Hide resolved
and specifically are not like a :term:`regular package` because they
have no ``__init__.py`` file.

Namespace packages allow you to split single package across multiple directories or distributions.
On the other hand, namespace packages have some drawbacks and pitfalls.
Use :term:`regular package` always when it fits your needs.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Use :term:`regular package` always when it fits your needs.
It is recommended to use a :term:`regular package` when possible.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does "When possible" and "fits your needs" have same nuance?

For example, user who are thinking splitting their packages to two distribution, but it is "possible" to keep releasing one distribution.

In this case, regular package is not fits their need, but it is possible to use regular package.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The suggested edit makes text less direct, which is the style wanted for our docs.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But I think the wording should be improved. «always» seems strong but is weakened by «when it fits your needs» – people may not now if they do need to split a project!

Also, «across multiple directories» is talking about source trees but «across multiple distributions» is a concern for packaging and installation, so they’re not on the same level.

I’ll think on this and suggest edits!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree, it is friendlier

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You misunderstand – I meant that the previous wording was more direct, which is what we want. «It is recommended» is not an improvement.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For context, @StanFromIreland, Open telemetry is an example of a namespace package.

I recommend removing "On the other hand ... your needs." This is a glossary entry so the prose should be brief and direct. I think if you add @methane's suggestion Namespace packages allow several individually installable packages to have a common parent package., then there is no need for the two sentences and they can be removed.

Copy link
Member

@merwok merwok left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oops message didn’t post earlier

and specifically are not like a :term:`regular package` because they
have no ``__init__.py`` file.

Namespace packages allow you to split single package across multiple directories or distributions.
On the other hand, namespace packages have some drawbacks and pitfalls.
Use :term:`regular package` always when it fits your needs.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But I think the wording should be improved. «always» seems strong but is weakened by «when it fits your needs» – people may not now if they do need to split a project!

Also, «across multiple directories» is talking about source trees but «across multiple distributions» is a concern for packaging and installation, so they’re not on the same level.

I’ll think on this and suggest edits!

@merwok merwok requested review from ncoghlan and merwok January 24, 2025 17:53
@methane methane force-pushed the doc-namespace-package branch from 5002745 to 16d5407 Compare January 24, 2025 23:13
@methane
Copy link
Member Author

methane commented Jan 24, 2025

Also, «across multiple directories» is talking about source trees but «across multiple distributions» is a concern for packaging and installation, so they’re not on the same level.

How about this?

Namespace packages allow several individually installable packages to have a common parent package.

Both of pip install and "setting multiple import paths" are "install".

In case of pip install, namespace package would be a single directory. But that is certainly a situation where implicit namespace packages can be used.

Doc/glossary.rst Outdated Show resolved Hide resolved
Copy link
Contributor

@willingc willingc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @methane. I recommend removing the awkward sentences at the end.

and specifically are not like a :term:`regular package` because they
have no ``__init__.py`` file.

Namespace packages allow you to split single package across multiple directories or distributions.
On the other hand, namespace packages have some drawbacks and pitfalls.
Use :term:`regular package` always when it fits your needs.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For context, @StanFromIreland, Open telemetry is an example of a namespace package.

I recommend removing "On the other hand ... your needs." This is a glossary entry so the prose should be brief and direct. I think if you add @methane's suggestion Namespace packages allow several individually installable packages to have a common parent package., then there is no need for the two sentences and they can be removed.

@methane
Copy link
Member Author

methane commented Jan 25, 2025

@willingc I would like to add a sentence to the official documentation to debunk the misconception that __init__.py is no longer needed from Python 3.3.

#113209 added unless using a :term:`namespace package`, a relatively advanced feature in the tutorial. But "relatively advanced feature" is not enough to prevent omitting __init__.py without knowing its risk.

We have namespace packages section in the reference. But tutorial refers to glossary, not reference. That is why I added the awkward sentences at the end.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Todo
Development

Successfully merging this pull request may close these issues.

4 participants