参考这个问题:
python: Two modules and classes with the same name under different packages
如果包中的所有模块都是唯一命名的,那么无论嵌套是什么? PEP8和PEP423似乎没有解决这个问题。
答案 0 :(得分:4)
不,不要求不同级别的名称必须不同。每个级别都是单独的命名空间。如果foo.utils
和foo.bar.utils
在您的项目中有意义,请执行此操作。
例如,Python标准库包含email.message
和email.mime.message
,multiprocessing.connection
以及multiprocessing.dummy.connection
等等:
$ 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
包中显示的所有模块都出现多次,不包括测试,__init__.py
和__main__.py
。
答案 1 :(得分:0)
由于package是基于文件系统的,因此在正常情况下,你不能拥有相同的包,因为文件/目录没有重复。
当然,您可以使用相同的命名空间包。
也可以在不同的路径中使用相同的包/模块名称。他们按顺序搜索,所以第一次获胜。