One common annoyance with python packaging is the lack of a standard distribution naming convention. The distribution is the archive you download from PyPI. The distribution contains the actual packages and/or modules. So basically the distribution name is the name argument in setup.py 's setup( ... ) call.

The naming is a bit confusing, the package is not like the package in your favourite Linux distro - the distribution is. And yes, the title is wrong. Intentionally wrong :)

Now guess the actual distribution name for the most popular mysql client:

mysqldb - Makes sense right? MySQLdb is what you would import in your code. But alas, this is not the distribution name.

- Makes sense right? is what you would import in your code. But alas, this is not the distribution name. mysql - Maybe this? Nope.

- Maybe this? Nope. python-mysqldb - No.

- No. python-mysql - No.

- No. mysqldb-python - No.

- No. mysql-python - It can't be this can it? Surprise, surprise, it is.

Now that was an extreme case but there's always this predilection of prefixing distributions with python- .

Note Update: there's a pypi-alias tool you should use instead.

There should be an easy way to create aliases on PyPI. I like to name distributions with the actual package name (or whatever users would import) and use this script to create a " python-<name> " alias for confused users:

#!/usr/bin/python import os import shutil import subprocess import sys import tempfile name = subprocess . check_output ([ 'python' , 'setup.py' , '--name' ]) . strip () url = "https://pypi.python.org/pypi/ %s /" % name description = subprocess . check_output ([ 'python' , 'setup.py' , '--description' ]) . strip () assert 'python' not in name alias = "python- %s " % name author = subprocess . check_output ([ 'python' , 'setup.py' , '--author' ]) . strip () author_email = subprocess . check_output ([ 'python' , 'setup.py' , '--author-email' ]) . strip () try : path = tempfile . mkdtemp () os . chdir ( path ) with open ( os . path . join ( path , 'setup.py' ), 'wb' ) as fh : fh . write ( b """# encoding: utf8 from setuptools import setup setup( name= %(alias)r , version="0.0", url= %(url)r , description= %(description)r , long_description='''Use ` %(name)s < %(url)s >`_ instead.''', author= %(author)r , platforms=['all'], zip_safe=False, author_email= %(author_email)r , install_requires=[ %(name)r ], ) """ % globals ()) subprocess . call ([ 'python' , 'setup.py' ] + sys . argv [ 1 :]) finally : shutil . rmtree ( path )

This assumes your actual distribution name is not prefixed with python- . I use it like this:

pypi-link register sdist upload

You could easily change the script to take the alias name as an argument.

Now back to the original nuisance - should MySQL-python have aliases or not?