-
Notifications
You must be signed in to change notification settings - Fork 30
Description
pypi appears to follow guidelines outlined in PEP8 around package names preferring to hyphenate them as opposed to underscore them
https://www.python.org/dev/peps/pep-0008/#package-and-module-names
"""
Modules should have short, all-lowercase names. Underscores can be used in the module name if it improves readability. Python packages should also have short, all-lowercase names, although the use of underscores is discouraged.
"""
Note there is a distinction between a module and a package. hashin is operating on packages.
Regardless of the naming choices, pypi appears to support both underscores and hyphens in packages. This is likely being done so-as to prevent major breaking changes across existing software.
Consider, for example, if pypi drew a hard line on this, switched all package names to hyphens, and disallowed underscores; a tidal wave of broken software would exist based on this decision.
So it looks like pypi supports both and (may?) support both forever. However, when you use hashin to get the package of choice, you're always returned the "correct" one; ie, the hyphenated version.
There exists a case where a user may have an existing (underscored) package definition, and hashin should behave to correct this to use the hyphenated version.
For instance, if the user's requirements file has the following (truncated sha's)
python_memcached==1.59 \
--hash=sha256:4dac64916871bd35502 \
--hash=sha256:a2e28637be13ee0bf1a8
Then upon running either of the following
hashin python_memcached==1.6.0 -r requirements.txthashin python-memcached==1.6.0 -r requirements.txt
The expected change to the requirements file would be
python-memcached==1.60 \
--hash=sha256:x00c64916871bd35502 \
--hash=sha256:x02e28637be13ee0bf1a
Today, however, the behavior is that hashin will do the following.
- Update, in place, if python_memcached is hashed
- Append if python-memcached is hashed
This issue proposes that hashin normalize this behavior to prefer (in all cases) the hyphenated name. Therefore,
- If python_memcached is hashed, replace python_memcached with python-memcached, and update hashes in place for python-memcached
- If python-memcached is hashed, update hashes in place for python-memcached