In reference to this question:
python: Two modules and classes with the same name under different packages
Should all modules in a package be uniquely named, regardless of nesting? PEP8 and PEP423 do not seem to address this.
In reference to this question:
python: Two modules and classes with the same name under different packages
Should all modules in a package be uniquely named, regardless of nesting? PEP8 and PEP423 do not seem to address this.
No, there is no requirement that names at different levels must be different. Each level is a separate namespace. If foo.utils and foo.bar.utils make sense in your project, just do so.
For example, the Python standard library has email.message and email.mime.message, and multiprocessing.connection, as well as multiprocessing.dummy.connection, and many more:
$ ls ~/Development/Library/cpython/Lib/**/*.py | grep -v __ | grep -v test_ | xargs basename | sort | uniq -c | grep -v ' 1 ' | sort
2 abc.py
2 ascii.py
2 client.py
2 connection.py
2 constants.py
2 dump.py
2 errors.py
2 filelist.py
2 handlers.py
2 log.py
2 message.py
2 parse.py
2 parser.py
2 process.py
2 queues.py
2 server.py
2 spawn.py
2 text.py
2 tree.py
3 main.py
4 config.py
5 support.py
6 util.py
That's all modules that appear inside packages, appear more than once, excluding tests, __init__.py and __main__.py.
Since package is based on the filesystem, you can not, in normal circonstance, have the same packages because files/directories have no duplicate.
You can have the same namespace package, of course.
It is also possible to have the same package/module name in different paths. They are searched in order, so the first win.