[Python-Dev] PEP 423 : naming conventions and recipes related to packaging
Benoît Bryon
benoit at marmelune.net
Thu Jun 28 21:32:59 CEST 2012
Let's try to summarize answers about top-level namespace with use cases
and examples... I hope I understood them well...
About "yes" or "no" meaning:
yes
It fits the (work-in-progress) convention. You would
recommend it.
no
You wouldn't recommend the naming pattern for *new*
projects (we can't require existing projects to be renamed).
=====
Project is standalone (doesn't mean "have no dependencies"),
released on PyPI:
* only one-level name is recommended, no namespace package
* yes: sphinx, flask, lettuce
* no: zc.rst2 (brand name is superfluous)
=====
Project is made of several subprojects which are not
standalone, released on PyPI:
* a namespace package is recommended
* the top-level namespace is functional: projects in
namespace make a bigger project. They are not designed
to work as standalone components.
* yes: ? Have you examples of such a use case?
* no: plone.app.* (too many levels)
=====
Project is related to another one (i.e. kind of contrib),
released on PyPI:
* note: there is a difference between "related to another
project" and "depends on another project". As an example,
Fabric depends on ssh, but is not a contrib of it.
* choice depends on conventions of related project
* if there is no specific convention, a namespace package
is recommended
* the top-level namespace is functional: projects in
namespace have a common characteristic, they are specific
to something, usually another project.
* yes: collective.castle
* yes because of explicit specific convention: sphinxcontrib-feed,
Flask-Admin
* no: castle, feed, admin, Plone.recipe.command (not specific
to Plone, in fact related to zc.buildout)
* Use of additional metadata is highly recommended (keywords,
topic::framework)
=====
Project is standalone, but really experimental (i.e.
name could change, not sure to publish version 0.2),
want to make it public:
* I want to share code, but I am really not sure it will
live long. I don't want to "block" a name slot.
* use a one-level name, as any standalone public project
* publish it on gitorious/github/bitbucket accounts
* don't register it with PyPI until it becomes a bit
mature? i.e. start with code repositories only?
* not valuable enough to be mentioned in PEP 423?
Maybe not in the scope of PEP 423. I mean it is more
about "what kind of projects we register with PyPI"
than "which name to choose".
=====
Project is standalone, but specific to my own usage, i.e.
I use it as personal software. It's not private because
I want to share the code (maybe someone will like it).
* use an one-level name, as any standalone public project
* publish it on code repositories.
* register it with PyPI? if only ready to maintain and
document?
* not valuable enough to be mentioned in PEP 423?
Maybe not in the scope of PEP 423. I mean it is more
about "what kind of projects we register with PyPI"
than "which name to choose".
=====
.. note::
conventions for private projects are provided as
informational guidelines.
Project is private, made of only one component:
* a namespace package is recommended (not sure for this
rule, could be an one-level project name)
* the top-level name can be any unique arbitrary value.
The company name could be a good choice.
* the top-level namespace is not functional, but represents
an ownership: the project is specific to the customer/product.
It contains closed-source parts.
* yes: mycustomer.website
* no: mycustomerwebsite, website
=====
Project is private, made of several components:
* a namespace package is recommended
* the top-level name can be any unique arbitrary value.
The company name could be a good choice.
* the top-level namespace is not functional, but represents a
common background: as an example, all components are specific
to the customer/product.
* yes: mywebsite.blog, mywebsite.auth, mywebsite.calendar (where
these components could be standalone WSGI applications, but
contain specific stuff related to the customer/product).
* no: blog, auth, calendar
=====
Do you prefer the examples above to the "top-level namespace relates to code ownership" rule?
Do you see other use cases?
Benoit
More information about the Python-Dev
mailing list