Hi,
Updated
https://bitbucket.org/benoitbryon/cpython/src/doc-package-names/Doc/packaging/packagenames.rst
Le 31/05/2012 18:00, PJ Eby a écrit :
You've definitely put in a lot of work on this, and most of the actual
guidelines in your PEP are quite good. I think there's a core part of
this that can and should be a good Informational-track PEP.
If it actually becomes a draft PEP, I guess we should:
* move the document in PEPs' repository
* add notes in Python packaging documentation to reference the PEP.
However, I do have a few comments regarding overall organization, and
some regarding some of the specific recommendations and tone.
In order of appearance in the PEP, they are:
1. I would strongly suggest striking the aside on eggs entirely --
there's no point to bringing it up just to dismiss it, and there never
was such a thing as an "egg name" - eggs are just another kind of
distribution, so they don't need a special term.
Removed the text about eggs.
2. A project name isn't the name of a directory, it's the name of the
thing you release distributions of. E.g., my "Importing" project on
PyPI (http://pypi.python.org/pypi/Importing), which has the following
names:
a) Project name = Importing
b) Release = 1.10
c) Distribution = Importing-1.10.zip
d) Module = peak.util.imports
Following this conceptual breakdown will make the naming
recommendations easier to follow.
Changed "Terminology section".
However, I am still confusing "project name" and "distribution name".
From your comment, I understand that name argument of
packaging.core.setup() is the name of the project, which is used to get
names of the distributions like "%(project_name)s-%(version)s.tar.gz".
But PEP 345 says it is the name of the distributions :
http://www.python.org/dev/peps/pep-0345/#name
Also, I propose to shorten or move the "terminology" section in another
document (another pep or in packaging documentation):
* it would simplify the document
* we'd better share the terminology between several documents.
3. The rationale is unnecessary and could (and *should*) be cut
entirely. Use PEP 8 as a model - it doesn't waste time explaining why
coding guidelines are a good idea. The truth is, your PEP would be
massively improved simply by deleting this entire section and not even
trying to replace it with anything.
Changed the "Rationale" section:
* kept "relationship with other PEPs" and "other sources of inspiration".
* moved "opportunity" section from "Rationale" to "Transition plan"
section. I kept it because opportunity should be a valuable reason to
adopt the conventions. And unlike other statements of "Rationale",
opportunity cannot be explained within the conventions. Would you remove
it too?
* removed other text in the "Rationale" section.
4. The proposal section is also unnecessary, and likely to produce
resistance in any event.
The "proposal" part of "Rationale" section has been removed.
There is no reason why every package should use your approach,and some
developers will be opposed to your conventions.
"Rationale" section used to point out that current (missing) naming
rules lead to problems, such as duplicate packages/modules or
inconsistent project/package names. Shouldn't we consider them as issues?
But, whatever the value of those arguments, I understand some developers
will be opposed to proposed conventions.
That's why I tried to make the document tell:
* at last, in the namespace you own, you do what you want.
* at least (and at first), you should state on the conventions you are
currently using.
* then, understand the issues that names can introduce.
* optionally follow the proposed conventions, which may lead to renaming
project or packages/modules.
Since the document is a bit directive, the ideas above appear in
reversed order: first you should apply the convention, but at last you
do what you want to. Is it clear in the document?
Let's consider the "django-pipeline" VS "pipeline" VS "python-pipeline"
example:
* there is no obligation at all to rename these projects or packages.
* but one should admit there is an issue with names. Here the issue is a
duplicate package name. See
https://github.com/cyberdelia/django-pipeline/issues/101
* first of all, authors should be aware of the issue.
* then, if authors want to, they can apply conventions, which could be a
rename of the distributed package only.
* if django-pipeline changes its package or project name, it breaks the
"most used" scheme (de facto standard) of the Django community. So it
would be another homemade naming scheme...
* unless the Django community takes the naming issues into account,
states about packaging, and optionally promotes migrations.
Notice that Django community could state that "there is no valuable
issue, i.e. wontfix". But this would mean that this choice is documented
in an issue, discussion or in the documentation... so it would fit the
guidelines as an explicit community-specific convention.
(I disagree with some of them myself, for that matter, as I will
discuss below.) Some of the material from this section might make a
good later section on "How to apply these guidelines to your project".
The "proposal" section has been removed as part of the "Rationale" one.
Were you talking about the "Transition plan" instead?
I moved the "transition plan" section at the end of the document, i.e.
conventions appear before.
In fact, I changed the "transition plan" into a set of recipes for
existing projects.
5. The actual guidelines are pretty good, as I said. In particular, I
like pretty much every thing you say about package names. I disagree
with some of your assertions regarding project names, however. It's
true that a project name doesn't need to spell out what a project does
(as with Celery, Nose, etc.), but it does in fact hurt discovery and
use when people use package-based project names. It's a continuing
source of frustration, for example, that buildout recipe projects have
names like z3c.recipe.scripts and other names that I can't ever
remember, and am forced to re-google or dig up previous buildout files
to find the magic names to include in my buildouts. To me, the
important thing about a project name is that it be *memorable*, and
that argues against using namespaced package names as project names
for contributions to a larger project, such as Plone portlets,
Buildout recipes, etc.
This isn't a huge point of contention for me, I just want to point out
that the good naming choices for projects are more complicated than
"just use the package name and let people search for it". I think
there are some other points you made that are a little too
cut-and-dried in the same way, but this is the only really big one.
I updated the conventions:
* added an overview of conventions,
* introduced the "memorable" value.
I agree that choosing a "good" name is not easy. I suppose that the best
we can do is to provide guidelines such as "ownership", "memorable" or
"meaningful"... so that users can avoid some common pitfalls.
Then, it's a matter of priorities. I would say that:
1. first, we should avoid duplicates (project and packages). That's why
"top-level namespace for ownership" and "use a single name" seem so
important to me.
2. then, it's better if the project name is memorable and meaningful and
easy to discover... but it's a less important issue than duplicates,
mainly because other metadata such as description, keywords and
classifiers can help.
6. Drop the language about how things are supported or not supported.
This just isn't true: Python the language supports you nesting things
6 layers deep if you feel like it, and AFAIK there are no plans to
change that, nor should there be. Stick to talking here about what is
or isn't a good idea, not what's supported or not supported. That's
just FUD.
Removed "support" vocabulary.
Changed "conventions" to "guidelines".
Used only lowercase "may", "should" and "can".
7. PyPI should be the only place people have to check for a
registered distribution name; authors of projects that are hosted
elsewhere can and should use "setup.py register" to claim the name, or
log on and do it.
Added "Register names to PyPI" guideline.
Changed the "check for name availability" recipe: PyPI is the only place.
Anyway, as I said, I think you've got some really good stuff here,
but it's got a lot of other stuff hiding it. Cut away the extras (and
the parts implying these guidelines are mandatory) and you've got a
good Informational-track PEP.
Does it sounds better now?
Regards,
Benoit
_______________________________________________
Distutils-SIG maillist - [email protected]
http://mail.python.org/mailman/listinfo/distutils-sig