[Distutils] conventions or best practice to choose package names?
Benoît Bryon
benoit at marmelune.net
Sun May 13 23:44:22 CEST 2012
Hi,
I am looking for a convention (i.e. kind of PEP) about package names:
"how to choose a good package name".
I couldn't find a PEP which gives guidelines about it.
PEP 8 gives some guidelines about "syntax" of package names.
I found articles like "Rules of thumb" section of
http://www.martinaspeli.net/articles/the-naming-of-things-package-names-and-namespaces.
But I was looking for something more "official".
And thus, I was thinking of a PEP, or something similar.
Scope:
* we have tools to create and distribute packages. Not covered by this
thread.
* we have tools to create namespace packages. Not covered by this thread.
* we have conventions about "syntax" of module names in PEP 8. Not
covered by this thread.
* do we have conventions, or at least guidelines, to choose a name for a
package?
I'm not to write this guide here (I'm not an expert about it), but, if
such a PEP or documentation doesn't exist, here are some considerations
to start:
* The Zen of Python tells "There should be one-- and preferably only one
--obvious way to do it."
*
http://www.martinaspeli.net/articles/the-naming-of-things-package-names-and-namespaces
seems interesting
* maybe
http://guide.python-distribute.org/specification.html#naming-specification
is a cool place
* maybe http://docs.python.org/dev/packaging/ is the right place for
that kind of information
* We should cover both simple packages and namespace packages.
* I guess some teams or communities already have such conventions. As an
example, does the Plone community have one?
* I feel there are too much de facto standards on Pypi: as an example
Plone community uses namespaces like "plone.app.theming", whereas Django
community uses "django-*" pattern, there are also many "pyramid_*"
packages...
* We should cover public packages published on Pypi, but also public
packages published on online repositories like Github, and also private
(personal or corporate) packages.
* I know we cannot migrate existing package names.
* We could recommend something for new packages.
Here are quotes seen in a recent thread about PEP 420
(http://mail.python.org/pipermail/import-sig/2012-May/000631.html),
which make me believe a convention would be useful.
Notice that, in fact, I discovered PEP 420 while searching for a PEP
about "how to choose a good namespace".
Le 13/05/2012 19:25, PJ Eby a écrit :
> Regarding the nesting issue and persuading Django developers to use
> namespaces, I would note that there isn't any reason for namespaces to
> be deeply nested in the first place. By convention, top-level
> namespace packages should be the name of a project or its sponsoring
> organization, which means there is rarely a need for deep nesting.
> Even cases like zope.app and peak.util are rare: usually a project or
> organization will have only one such "miscellaneous" namespace with
> lots of separately-distibuted components.
>
> (After all, the main reason to *have* a namespace package is to have
> separately-distributed subpackages. So, self-contained packages don't
> need to have namespaces of their own, almost by definition.)
>
> Anyway, what I've noticed is that when people want to deeply nest
> namespaces, it's usually because they're trying to share a namespace
> across organizations, like making a shared 'net.*' namespace. The
> idea of namespaces isn't for that kind of categorization, though, it's
> for *ownership*. If two developers are fighting over where to put
> something in a category hierarchy, it's a sign that they need to be
> working in different namespaces, with each developer staking a claim
> to a *top-level* package -- like OSAF's osaf.*, Zope Corporation's
> zc.* (vs. the community project's zope.*), and so on.
>
> When developers use namespaces for project/ownership distinction, the
> resulting package hierarchies can be pretty much as flat as you like.
If I had to explain it to another Python developer, I wish I could give
him an hyperlink and say "read and follow the convention".
Le 13/05/2012 20:56, "Martin v. Löwis" a écrit :
> In Java, people apparently want that because they get these deeply
> nested directory hiearchies (org/apache/commons/betwixt/expression).
> It's apparently possible to condense this into
> org.apache.commons.betwixt/expression (which isn't a shorter string,
> but fewer cd commands / explorer clicks / .svn folders).
>
> I predict that people will start using PEP 420 in the reversed-domain
> fashion also, so we eventually might end up wanting something like
> this for Python.
Could we anticipate namespace usage? At least for some "simple" things
that already are de facto standards.
As an example, I guess we could state about "reasonable maximum
namespace depth", because on Pypi there is not many packages with more
than 3 levels.
Regards,
Benoit
More information about the Distutils-SIG
mailing list